代码之家  ›  专栏  ›  技术社区  ›  Andrey Shchekin

在焦点上显示WPF工具提示的最简单的方式是什么?

  •  3
  • Andrey Shchekin  · 技术社区  · 15 年前

    当下列控件获得焦点时,显示工具提示所需的最少步骤数是多少?

    <TextBox ToolTip="Hello there!" ... />
    

    我在GotFocus尝试了下面的方法

        private void ..._GotFocus(object sender, RoutedEventArgs e) {
            var element = (FrameworkElement)sender;
            var tooltip = element.ToolTip;
            if (!(tooltip is ToolTip)) {
                tooltip = new ToolTip { Content = tooltip };
                element.ToolTip = tooltip;
            }
    
            ((ToolTip)tooltip).IsOpen = true;
        }
    

    ToolTipService.Placement 对于这个控件和 SystemParameters.ToolTipPopupAnimationKey 设置更高的级别。

    我怎样才能让它正常工作,并遵守所有通常用于工具提示的设置(显然,除了时间之外)?

    2 回复  |  直到 15 年前
        1
  •  0
  •   Ray Burns    15 年前

    我将在附加的属性中构建一个IsKeyboardFocused绑定,如下所示:

     public class ShowOnFocusTooltip : DependencyObject
     {
       public object GetToolTip(...
       public void SetToolTip(...
       public static readonly DependencyProperty ToolTipProperty = DependencyProperty.RegisterAttached(..., new PropertyMetadata
       {
         PropertyChangedCallback = (obj, e) =>
         {
           ToolTipService.SetToolTip(obj,
             e.NewValue==null ? null :
             BuildToolTip(obj, e.NewValue));
         }
       });
    
       private object BuildToolTip(DependencyObject control, object content)
       {
         var tooltip = content is ToolTip ? (ToolTip)content : new ToolTip { Content = content };
         tooltip.SetBinding(ToolTip.IsOpenProperty,
           new Binding("IsKeyboardFocusWithin") { Source = control });
         return tooltip;
       }
    
        2
  •  0
  •   Tim Cooper    13 年前

    没有Windows计算机可供测试,但我会想:

    <TextBox x:Name="textBox">
        <TextBox.ToolTip>
            <ToolTip IsOpen="{Binding IsKeyboardFocusWithin, ElementName=textBox}">
                Whatever
            </ToolTip>
        </TextBox.ToolTip>
    </TextBox>
    
    推荐文章