這實際上與DescriptionViewer無關,它是ToolTip的行爲。一旦你點擊鼠標,工具提示就會消失。在這種情況下,你可能想寫你自己的工具提示。
我覺得通常當你點擊DescriptionViewer圖標時,應該會打開一個新窗口,就像更詳細的幫助頁面一樣。所以用戶不會感到困惑。
更新:
您可以通過定義附加屬性實現這一目標。基本上,您將此屬性附加到DescriptionViewer中的按鈕。當按鈕的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的風格
然後,您將附加屬性按鈕。您還需要命名工具提示,以便能夠使用附加屬性類中的查找名稱來查找它。
<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>
希望這會有所幫助。 :)
「應該有一個新的窗口打開,就像一個更詳細的幫助頁面」 - 是爲什麼不,但我仍然無法處理鼠標點擊做到這一點。看起來我應該寫我自己的DescriptionViewer。 – thmshd 2011-04-30 20:38:26
如果你只是想點擊鼠標,那很容易。您可以編輯descrption查看器的默認樣式,並在模板內部找到名爲DescriptionContent的按鈕,並從那裏處理其Click事件。 – 2011-04-30 23:28:42
好吧,我明白這背後的概念,但我實際上並沒有覺得它很容易做到這一點在一個優雅的,可重用的方式:) – thmshd 2011-05-02 21:26:31