如何在dataTemplate中为textblock动态设置工具提示?

时间:2012-01-11 02:50:50

标签: c# wpf xaml tooltip

我的列表框中的每个条目都有以下模板。如何以编程方式为Price和ProductName设置工具提示?我可以使用哪些ID? 请注意,我想区分两个项目:Price和ProductName,并为每个项目显示不同的工具提示,即使它们属于列表框中的相同条目。

如您所见,在xaml中设置工具提示(如下面的价格所示)非常简单。但我需要灵活地动态设置它。感谢。

<DataTemplate>
    <DockPanel >
        <TextBlock DockPanel.Dock="Left" Text = "{Binding ProductName}" />
        <TextBlock Text="   " />
        <TextBlock Text = "{Binding Price}" ToolTip="Price" />
    </DockPanel>
</DataTemplate>

2 个答案:

答案 0 :(得分:4)

您可以绑定工具提示(几乎可以绑定任何属性),以便在分配给属性时UI将更新。你最好的选择是在某处创建一个属性(比如具有你的Price属性的对象)并绑定到该生物。只需确保您使用DependencyProperty或使用INotifyPropertyChanged

<DataTemplate>
    <DockPanel>
       <TextBlock DockPanel.Dock="Left" Text = "{Binding ProductName}" />
       <TextBlock Text="   " />
       <TextBlock Text = "{Binding Price}" ToolTip="{Binding PriceTooltipProperty}" />
    </DockPanel>
</DataTemplate>

答案 1 :(得分:1)

您可以使用转换器,转换器接收一种对象,然后您可以检查它是什么?即字符串或数字,并返回一个字符串,其中包含您想要的任何工具提示。

{Binding Path=Price, Converter={StaticResource ObjectToTooltipConverter}}

然后你的转换器看起来像这样。

public class ObjectToTooltipConverter: IValueConverter {

 public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
  if(value is Decimal)
  {
    return "The value was a decimal";
  }
  if(value is String)
  {
    return "The value was a string";

}