2012-01-11 63 views
2

我的列表框中的每个条目都有下面的模板。如何以编程方式为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> 
+0

只是一个侧面说明:考虑用矩形宽度的“N”免去您空白的TextBlock,想必作为分隔符。 – 2012-01-11 05:53:15

+0

@GayotFow,你能解释一下(或者提供一个链接)为什么使用矩形是一种更好的方法吗? – Ben 2015-05-18 16:59:52

+1

@本,重量更轻 – 2015-05-18 17:04:19

回答

4

您可以绑定工具提示(您可以绑定几乎任何属性),以便在分配给属性时UI将更新。你最好的选择是在某个地方建造一个物业(比如拥有你的价格属性的物品)并且绑定到那个生物。只要确保您使用DependencyProperty或使用INotifyPropertyChanged

<DataTemplate> 
    <DockPanel> 
     <TextBlock DockPanel.Dock="Left" Text = "{Binding ProductName}" /> 
     <TextBlock Text=" " /> 
     <TextBlock Text = "{Binding Price}" ToolTip="{Binding PriceTooltipProperty}" /> 
    </DockPanel> 
</DataTemplate> 
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"; 

}

相关问题