我想爲我的ComboBoxItem內容使用通用樣式,並將文本內容綁定到基礎類的不同屬性。所以這是我能想到的最好的,但綁定是硬編碼的。因此,對於使用此ItemContainerStyle綁定到組合框的每個類,我都必須實現「MainText」和「SubText」屬性。WPF組合框:如何利用帶綁定的通用ItemContainerStyle
問題是,有沒有辦法讓綁定軟編碼,以便從組合框引用的樣式可以指定使用底層類的哪些字符串屬性。
<Style TargetType="{x:Type ComboBoxItem}" x:Key="ComboBoxItemStyleA1">
<Setter Property="Template" >
<Setter.Value>
<ControlTemplate TargetType="ComboBoxItem">
<Border x:Name="BB" Padding="8,3,8,3" Background="DarkGreen">
<StackPanel Margin="0">
<TextBlock Foreground="White" FontSize="16" Text="{Binding MainText}"/>
<TextBlock Foreground="White" FontSize="8" Text="{Binding SubText}"/>
</StackPanel>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" TargetName="BB" Value="#FF256294"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
而且使用的樣式......
<ComboBox ItemsSource="{Binding Items}"
ItemContainerStyle="{StaticResource ComboBoxItemStyleA1}" />
繼dowhilefor的回答(很多很多的感謝 - WPF是偉大的,但肯定是一次發現之旅)
我使用的數據模板來定義最初的單元格外觀 - 然後希望使用基於comboboxitem的樣式和定義的控件模板,我可以在其中指定onmouseover觸發器。即這些改變背景顏色等。
Butj a)我無法刪除上面模板的邊框部分 - 觸發器通過targettype =「BB」綁定到它。所以我有點想把觸發器綁定到容器上,以便數據模板可以從模板綁定中獲取背景,但不知道如何獲取此管道。
b)我意識到即使我註釋掉BB在觸發器上的特定綁定只是爲了讓它運行 - 組合框沒有找到並使用我定義的DataTemplate。似乎在我的comboboxitemstyle中定義controltemplate會停止它拾取數據模板。
我希望我在這裏有意義 - 底線是我只想要一個我可以應用觸發器的樣式,設置我的coobobox項目的背景顏色。它不應該知道數據是什麼 - 即能夠插入將(模板)綁定到該背景顏色的數據模板。
非常感謝您的快速響應。
順便說一句,我使用ItemContainerStyle與ItemTemplate中一起選擇,所以我可以在下拉列表中選擇不同的表示在框列表
我可能比理解WPF更接近理解 - 我同意你所說的所有建議,特別是保持綁定遠離樣式......這真的是我想要做的。 (順便說一句,我同意你寫一個包含「caption」和「description」的包裝類作爲我想要做的非常好的乾淨解決方案 - 意味着所有組合框將具有相同的外觀和感覺以及一個不錯的解決方案...我可以使用這個,但現在我想嘗試解決這個難題....) –
對不起 - 新的stackoverflow - 讓我完成我說的話。 –
我編輯我的問題,而不是在這裏的意見,謝謝dowhilefor。 –