这实际上与DescriptionViewer 无关,它是ToolTip 的行为。单击鼠标后,工具提示将消失。在这种情况下,您可能需要编写自己的 ToolTip。
我认为通常当您单击 DescriptionViewer 图标时,应该会打开一个新窗口,就像一个更详细的帮助页面。这样用户就不会感到困惑了。
更新:
您可以通过定义附加属性来实现此目的。基本上,您将此属性附加到您的 DescriptionViewer 内的按钮。当 Button 的 Click 事件被触发时,您会在 Button 下方找到 Tooltip,并将其 IsOpen 设置为 ture。然后,您还需要处理 MouseLeave 事件以在鼠标离开后隐藏 Tooltip。
这是附加属性的定义方式。
公共静态类 ButtonAttachedProperties
{
公共静态布尔 GetOpenToolTip(DependencyObject obj)
{
返回(布尔)obj.GetValue(OpenToolTipProperty);
}
public static void SetOpenToolTip(DependencyObject obj, bool value)
{
obj.SetValue(OpenToolTipProperty, value);
}
public static readonly DependencyProperty OpenToolTipProperty =
DependencyProperty.RegisterAttached("OpenToolTip", typeof(bool), typeof(ButtonAttachedProperties), new PropertyMetadata(false, Callback));
private static void Callback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var button = d as Button;
if (button == null || !(bool)e.NewValue) return;
button.Click += (s, e1) =>
{
var tooltip = button.FindName("MyToolTip") as ToolTip;
if (tooltip != null)
{
tooltip.PlacementTarget = button;
tooltip.IsOpen = true;
}
};
button.MouseLeave += (s, e2) =>
{
var tooltip = button.FindName("MyToolTip") as ToolTip;
if (tooltip != null)
tooltip.IsOpen = false;
};
}
}
然后在 DescriptionViewer 的样式中,将属性附加到 Button。此外,您需要为 Tooltip 命名,以便能够使用附加属性类中的 FindName 找到它。
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Height="{TemplateBinding Height}" Padding="{TemplateBinding Padding}" Width="{TemplateBinding Width}">
<Button x:Name="DescriptionContent" local:ButtonAttachedProperties.OpenToolTip="True" BorderBrush="#FFFFFFFF" BorderThickness="1" Background="#00000000" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" IsTabStop="False" Padding="1" Template="{TemplateBinding GlyphTemplate}" Visibility="Collapsed" VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
<ToolTipService.ToolTip>
<ToolTip x:Name="MyToolTip" Content="{TemplateBinding Description}" PlacementTarget="{Binding RelativeSource={RelativeSource TemplatedParent}}" Style="{TemplateBinding ToolTipStyle}"/>
</ToolTipService.ToolTip>
</Button>
</Border>
希望这会有所帮助。 :)