如何动态设置dataTemplate中textblock的工具提示?
问题描述:
我的列表框中的每个条目都有下面的模板。如何以编程方式为Price和ProductName设置工具提示?我可以使用什么ID? 请注意,我想区分两个项目:Price和ProductName,并为每个项目显示不同的工具提示,即使它们属于列表框中的同一条目。如何动态设置dataTemplate中textblock的工具提示?
正如您所见,在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>
答
你可以使用一个转换器,转换器需要一个类型的对象,那么你可以检查什么那是什么?即一个字符串或数字,并返回一个字符串与任何你想要的工具提示。
{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";
}
只是一个侧面说明:考虑用矩形宽度的“N”免去您空白的TextBlock,想必作为分隔符。 – 2012-01-11 05:53:15
@GayotFow,你能解释一下(或者提供一个链接)为什么使用矩形是一种更好的方法吗? – Ben 2015-05-18 16:59:52
@本,重量更轻 – 2015-05-18 17:04:19