C# 如何在dataTemplate中动态设置textblock的工具提示?

C# 如何在dataTemplate中动态设置textblock的工具提示?,c#,wpf,xaml,tooltip,C#,Wpf,Xaml,Tooltip,我的列表框中的每个条目都有下面的模板。如何以编程方式设置Price和ProductName的工具提示?我可以使用什么ID请注意,我想区分两个项目:Price和ProductName,并为每个项目显示不同的工具提示,即使它们属于列表框中的同一条目。 如您所见,在xaml中设置工具提示(如下面的Price所示)非常简单。但我需要动态设置的灵活性。谢谢 <DataTemplate> <DockPanel > <TextBlock DockPanel

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

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

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

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

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

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

{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";

}/P>只是一个侧面注释:考虑替换你的空白文本块,大概被用作分隔符,宽度为“n”的矩形。@ GayotFow,你能解释(或提供一个链接)为什么使用矩形是更好的方法?“本,它更轻。