我想为我的 ComboBoxItem 内容使用通用样式,并将文本内容绑定到我的基础类上的不同属性。所以这是我能想到的最好的方法,但绑定是硬编码的。因此,对于使用此 ItemContainerStyle 绑定到组合框的每个类,我都必须实现“MainText”和“SubText”属性。
问题是,有没有办法对绑定进行软编码,以便从组合框引用的样式我可以指定使用底层类的哪些字符串属性。
<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 很棒,但肯定是一次发现之旅)
我最初使用数据模板来定义单元格外观 - 然后想使用基于组合框的样式和定义的控件模板,我可以在其中指定 onmouseover 触发器。即这些是为了改变背景颜色等。
Butj a) 我无法删除上面模板的边框部分 - 触发器通过 targettype="BB" 绑定到它。所以我有点想将触发器绑定到容器,这样数据模板就会从模板绑定中获取背景,但不知道如何将其插入。
b)我意识到,即使我注释掉触发器上的 BB 特定绑定只是为了让它运行——组合框也找不到并使用我定义的 DataTemplate。似乎在我的 comboboxitemstyle 中定义 controltemplate 会阻止它拾取数据模板。
我希望我在这里说得通 - 底线是我只想要一种样式,我可以使用触发器来设置我的 cobobox 项目的背景颜色。它不应该知道数据是什么 - 即能够插入将(模板?)绑定到此背景颜色的数据模板。
非常感谢您的快速响应。
顺便说一句,我将 ItemContainerStyle 与 ItemTemplate 结合使用,因此我可以在下拉列表中使用与组合框列表中显示的内容不同的表示形式