Каков наименее навязчивый способ отображения всплывающей подсказки WPF? - PullRequest
3 голосов
/ 02 мая 2010

Какое минимальное количество шагов требуется для отображения всплывающей подсказки, когда следующий элемент управления получает фокус?

<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 ]

0 голосов
/ 15 мая 2010

Я бы построил привязку 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;
   }
0 голосов
/ 02 мая 2010

У меня нет машины с Windows для тестирования, но я бы подумал:

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