это на самом деле не имеет ничего общего с DescriptionViewer, это поведение всплывающей подсказки. Всплывающая подсказка исчезнет, как только вы нажмете кнопку мыши. В этом случае вы можете написать свою собственную подсказку.
Я думаю, что обычно, когда вы нажимаете на иконку DescriptionViewer, должно открываться новое окно, похожее на более подробную справочную страницу. Так что пользователь не запутается.
Обновление:
Этого можно достичь, определив прикрепленное свойство. По сути, вы прикрепляете это свойство к кнопке внутри вашего DescriptionViewer. Когда вызывается событие Click кнопки, вы находите подсказку под кнопкой и устанавливаете ее IsOpen в значение ture. Затем вам также нужно обработать событие MouseLeave, чтобы скрыть всплывающую подсказку, как только мышь исчезнет.
Так определяется прикрепленное свойство.
открытый статический класс ButtonAttachedProperties
{
public static bool GetOpenToolTip (DependencyObject obj)
{
return (bool) 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 вы присоединяете свойство к кнопке. Также вам нужно дать имя всплывающей подсказке, чтобы найти его с помощью FindName в классе свойства attach.
<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>
Надеюсь, это поможет. :)