2009-08-17 20 views
0

我有一個摘要UserControl,我想顯示一個ToolTip。此ToolTip應基於在派生的UserControls中定義的DataContext的類型而不同。如何根據Wpf中的DataContext DataType顯示不同的工具提示?

是否有一種方法可以爲基類中的每種類型定義不同的ToolTip?如果沒有,我怎麼能在派生的UserControl中設置這個工具提示?

這裏是我想我會去:

<UserControl ... 
    <UserControl.ToolTip> 
    <DataTemplate DataType="{x:Type Library:Event}"> 
     <StackPanel> 
     <TextBlock FontWeight="Bold" Text="{Binding Name}" /> 
     <TextBlock> 
      <TextBlock.Text> 
      <Binding Path="Kp" StringFormat="{}Kp: {0}m" /> 
      </TextBlock.Text> 
     </TextBlock> 
     </StackPanel> 
    </DataTemplate> 
    </UserControl.ToolTip> 
</UserControl> 

回答

1

你不能筆者,返回你想顯示該類型的信息自定義ValueConverter?

您可以'喜歡這一點'來讓轉換器接受您建議的數據模板,但這將完全啓用您的方案。

首先,創建值轉換器。請原諒我的快速代碼:

public class ToolTipConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    UIElement tip = null; 

    if (value != null) 
    { 
     // Value is the data context 
     Type t = value.GetType(); 
     string fancyName = "Unknown (" + t.ToString() + ")"; 

     // Can use IsInstanceOf, strings, you name it to do this part... 
     if (t.ToString().Contains("Person")) 
     { 
      fancyName = "My custom person type"; 
     }; 


     // Could create any visual tree here for the tooltip child 
     TextBlock tb = new TextBlock 
     { 
      Text = fancyName 
     }; 
     tip = tb; 
    } 

    return tip; 
} 

public object ConvertBack(object o, Type t, object o2, CultureInfo ci) 
{ 
    return null; 
} 

}

然後在你的用戶控件的資源實例(我定義的xmlns「本地」是這個命名空間和裝配):

<UserControl.Resources> 
    <local:ToolTipConverter x:Key="toolTipConverter" /> 
</UserControl.Resources> 

而且使確保根視覺用戶控件的綁定其ToolTip屬性:

<Grid 
    ToolTip="{Binding Converter={StaticResource toolTipConverter}}" 
    Background="Blue"> 
    <!-- stuff goes here --> 
</Grid> 
+0

謝謝,我現在通過在代碼中創建一個可視化樹來使它工作。但我真的希望能夠在xaml中定義模板,因爲這個應用程序必須進行本地化,這會容易得多。你如何讓轉換器接受模板?你能指點我一些參考鏈接嗎? – 2009-08-18 07:57:25

+0

我設法做到最後,它完美的工作,謝謝你:-) – 2009-08-18 11:36:49

0

雖然這是一個真正的老帖子,我仍然會發表我的回答,因爲我今天面臨同樣的問題。基本上,我最終將所有的工具提示模板都放到了資源中,就像問題的作者一樣。爲此,工具提示內容和資源部分缺少綁定。有了這些,temlates確實得到應用。

<UserControl ... 
    <UserControl.ToolTip> 
    <Tooltip Content="{Binding}"> 
     <Tooltip.Resources> 
     <DataTemplate DataType="{x:Type Type1}"> 
      ... 
     </DataTemplate> 
     <DataTemplate DataType="{x:Type Type2}"> 
      ... 
     </DataTemplate> 
     </Tooltip.Resources> 
    </Tooltip> 
</UserControl>