2012-01-11 52 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"; 

}