我的WPF ListBox包含两种类型的对象:Product和Brand。
我希望我的产品可选择。我希望我的品牌不能选择。
这两种类型都有自己的DataTemplate
默认情况下,任何都可以被选中:
<ListBox ... >
<ListBox.Resources>
<DataTemplate DataType="{x:Type local:Product}">
...
</DataTemplate>
<DataTemplate DataType="{x:Type local:Brand}">
...
</DataTemplate>
</ListBox.Resources>
</ListBox>
我可以用Setter设置可聚焦,但是nothing可以被选中:
<ListBox ... >
<ListBox.Resources>
...
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Focusable" Value="False" />
</Style>
</ListBox.Resources>
</ListBox>
我不能把Setter放到DataTemplate中。
我不能把数据类型放到样式上。
如何只设置Brand类型的ListBoxItems的样式?
多亏了StyleSelector类,您可以根据ItemContainerStyle的数据类型附加样式。这里有一个很好的例子:http://www.telerik.com/help/wpf/common-data-binding-style-selectors.html
可以在ListBoxItem样式上使用数据触发器吗?如果是,绑定到DataContext(您的类)并使用值转换器来测试类型。如果它是你感兴趣的,样式的ListBoxItem,使其不能显示为选中。
我不认为你可以在没有代码隐藏或自定义行为的情况下禁止在选择器(ListBox的父类)中选择一个项目。