我的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设置Focusable,但是可以选择 nothing :
<ListBox ... >
<ListBox.Resources>
...
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Focusable" Value="False" />
</Style>
</ListBox.Resources>
</ListBox>
我不能把Setter放在DataTemplate中。
我无法将DataType放到Style上。
如何仅设置Brand类型的ListBoxItem的样式?
答案 0 :(得分:2)
由于StyleSelector类,您可以根据ItemContainerStyle的数据类型附加样式。这里有一个很好的例子:http://www.telerik.com/help/wpf/common-data-binding-style-selectors.html
答案 1 :(得分:1)
您可以在ListBoxItem样式上使用数据触发器吗?如果是这样,绑定到DataContext(您的类)并使用值转换器来测试类型。如果它是您感兴趣的那个,请设置ListBoxItem的样式,使其无法显示为选中状态。
我不认为您可以禁止在没有代码隐藏或自定义行为的选择器(ListBox的父级)中选择项目。