如何为某个DataType的ListBoxItem应用样式设置器?

时间:2011-09-24 21:43:44

标签: wpf xaml styles datatemplate listboxitem

我的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的样式?

2 个答案:

答案 0 :(得分:2)

由于StyleSelector类,您可以根据ItemContainerStyle的数据类型附加样式。这里有一个很好的例子:http://www.telerik.com/help/wpf/common-data-binding-style-selectors.html

答案 1 :(得分:1)

您可以在ListBoxItem样式上使用数据触发器吗?如果是这样,绑定到DataContext(您的类)并使用值转换器来测试类型。如果它是您感兴趣的那个,请设置ListBoxItem的样式,使其无法显示为选中状态。

我不认为您可以禁止在没有代码隐藏或自定义行为的选择器(ListBox的父级)中选择项目。