2011-07-05 160 views
1

我想創建一個WPF工具提示,其中包含工具提示標題的標籤,然後是包含更多詳細文本的文本塊。我創建了以下樣式在資源字典:自定義WPF工具提示

<Style x:Key="AppToolTip" 
    TargetType="ToolTip"> 
<Setter Property="OverridesDefaultStyle" Value="true" />  
<Setter Property="Template"> 
     <Setter.Value> 

      <ControlTemplate TargetType="ToolTip"> 
       <StackPanel> 
        <Label Content="{TemplateBinding Content}" FontWeight="Bold" Background="Blue" Foreground="White"> 

        </Label> 
        <TextBlock Padding="10" TextWrapping="WrapWithOverflow" Width="200"> 

        </TextBlock> 
       </StackPanel> 
      </ControlTemplate> 
     </Setter.Value></Setter> 
</Style> 

而且可以這種風格成功地應用到一個按鈕,像這樣並有提示出現頭:

<Button.ToolTip> 
<ToolTip Style="{DynamicResource PalletToolTip}"> 
        <Binding Source="{x:Static ResStrings.New}"/> 
       </ToolTip> 
</Button.ToolTip> 

什麼我卡上我如何從上面的用法中設置額外描述性文本的內容?顯示工具提示標題時,我已經將數據綁定到Content屬性。 任何讀過Adam Nathan的WPF Unleashed書籍的人都會意識到,我使用他的示例工具提示XAML,但在他的情況下,他使用硬編碼字符串作爲標籤和文本塊的內容。我想創建更可重用的東西,因此希望使用數據綁定來實現相同的效果。

回答

5

我會從ToolTip繼承HeaderedToolTip類,並添加一個Header屬性。我會像您所做的那樣爲該控件指定模板。然後,我將能夠使用它像這樣:

<Button> 
    <Button.ToolTip> 
     <HeaderedToolTip Header="My Title" Content="My Content"/> 
    </Button.ToolTip> 
</Button> 

或者,用綁定:

<Button> 
    <Button.ToolTip> 
     <HeaderedToolTip Header="{Binding ToolTipTitle}" Content="{Binding ToolTipText}"/> 
    </Button.ToolTip> 
</Button> 
+0

感謝肯特 - 我認爲這看起來是最好的方法。 – Auburg

1

您可以使用包含工具提示中所需的所有必需屬性的對象或ViewModel。

class MyToolTipViewModel : INotifyPropertyChanged 
{ 
    public string Header 
    { 
     get{ return mHeader;} 
     set{ mHeader = value; RaisePropertyChanged("Header"); } 
    } 

    public void RaisePropertyChanged(string aProperty) 
    { 
    // .. implementation of INotifyPropertyChanged 
    } 
} 

那麼你可以直接在這個類的實例上設置tolltip。

myButton.ToolTip = new MyToolTipViewModel(); 

現在,在此之後,您的工具提示只會顯示ViewModel類的完整限定名稱。 您現在需要的是一個DataTemplate,它告訴WPF如何將該類轉換爲可視對象。

<DataTemplate DataType="{x:Type MyToolTipViewModel}"> 
    <TextBlock Text="{Binding Header}"/> 
</DataTemplate> 

DataTemplate需要放置在資源樹中。在較高級別對象的資源部分中或直接在應用程序或窗口資源級別上。

希望有所幫助。

+0

這不會允許您自定義工具提示本身,只有在內容的外觀和感覺它。 –

+0

您可以更改我的代碼以設置所需樣式的工具提示控件,然後將工具提示的內容設置爲視圖模型。 – dowhilefor