public LiveToolTipAdorner(UIElement adornedElement, LiveToolTip tooltip) : base(adornedElement) { visualChildren = new VisualCollection(this); FollowMouseCursor = LiveToolTipService.GetFollowMouseCursor(adornedElement); ToolTipOffset = new Point(LiveToolTipService.GetToolTipOffsetX(adornedElement), LiveToolTipService.GetToolTipOffsetY(adornedElement)); adornedElement.MouseLeave += adornedElement_MouseLeave; adornedElement.MouseEnter += adornedElement_MouseEnter; if (FollowMouseCursor) { adornedElement.PreviewMouseMove += adornedElement_MouseMove; } //FrameworkElement frAdornedElement = (FrameworkElement)adornedElement; //frAdornedElement.SizeChanged += frAdornedElement_SizeChanged; this.liveTooltip = tooltip; tooltip.Visibility = Visibility.Hidden; var parentCanvas = liveTooltip.Parent as Canvas; if (parentCanvas != null) { parentCanvas.Children.Remove(liveTooltip); } canvas.Children.Add(liveTooltip); AddLogicalChild(canvas); visualChildren.Add(canvas); Unloaded += LiveTooltipAdorner_Unloaded; }
private static void OnTooltipOpacityChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { LiveToolTip liveTooltip = GetLiveToolTip(d); if (liveTooltip != null) { liveTooltip.Opacity = (double)e.NewValue; } }
private static void AddTooltipForElement(FrameworkElement source, LiveToolTip tooltip) { AdornerLayer layer = AdornerLayer.GetAdornerLayer(source); if (layer != null) { LiveToolTipAdorner adorner = new LiveToolTipAdorner(source, tooltip); layer.Add(adorner); } }
private static void AddTooltip(FrameworkElement source) { if (DesignerProperties.GetIsInDesignMode(source)) { return; } LiveToolTip tooltip = GetLiveToolTip(source); Window window = Window.GetWindow(source); FrameworkElement child = source; FrameworkElement parent = null; if (window != null) { while (parent != window) { parent = (FrameworkElement)VisualTreeHelper.GetParent(child); child = parent; var nameScope = NameScope.GetNameScope(parent); if (nameScope != null) { string nameScopeName = nameScope.ToString(); if (nameScopeName != "System.Windows.TemplateNameScope") { NameScope.SetNameScope(tooltip, nameScope); break; } } } } var binding = BindingOperations.GetBinding(tooltip, LiveToolTip.ContentProperty); if (binding != null) { BindingOperations.ClearBinding(tooltip, LiveToolTip.ContentProperty); BindingOperations.SetBinding(tooltip, LiveToolTip.ContentProperty, binding); } Binding dataContextBinding = new Binding { Path = new PropertyPath("DataContext"), Source = source }; tooltip.SetBinding(LiveToolTip.DataContextProperty, dataContextBinding); tooltip.Owner = source; if (GetTooltipOpacity(source) != (double)LiveToolTipService.TooltipOpacityProperty.DefaultMetadata.DefaultValue) { tooltip.Opacity = LiveToolTipService.GetTooltipOpacity(source); } AddTooltipForElement(source, tooltip); }
private static void SetLiveToolTip(DependencyObject obj, LiveToolTip value) { obj.SetValue(LiveToolTipProperty, value); }
private static void OnToolTipChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { FrameworkElement source = (FrameworkElement)d; if (e.NewValue == null) { source.Loaded -= source_Loaded; source.ClearValue(LiveToolTipProperty); } if (GetIsPropertyProxy(source)) { return; } var content = e.NewValue; DataTemplate template = content as DataTemplate; if (template != null) { content = template.LoadContent(); } LiveToolTip tooltip = null; if (e.NewValue is LiveToolTip) { tooltip = e.NewValue as LiveToolTip; } else { tooltip = new LiveToolTip { Content = content }; } if (tooltip == null && e.OldValue == null) { tooltip = new LiveToolTip { Content = content }; } if (tooltip != null) { SetLiveToolTip(source, tooltip); if (!source.IsVisible) { source.IsVisibleChanged += source_Visible; } else if (!source.IsLoaded) { source.Loaded += source_Loaded; } else { AddTooltip(source); } } }