コード例 #1
0
        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;
        }
コード例 #2
0
        private static void OnTooltipOpacityChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            LiveToolTip liveTooltip = GetLiveToolTip(d);

            if (liveTooltip != null)
            {
                liveTooltip.Opacity = (double)e.NewValue;
            }
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 private static void SetLiveToolTip(DependencyObject obj, LiveToolTip value)
 {
     obj.SetValue(LiveToolTipProperty, value);
 }
コード例 #6
0
        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);
                }
            }
        }