Wpf 如何为特定数据类型的ListBoxItems应用样式设置器?

Wpf 如何为特定数据类型的ListBoxItems应用样式设置器?,wpf,xaml,styles,datatemplate,listboxitem,Wpf,Xaml,Styles,Datatemplate,Listboxitem,我的WPF列表框包含两种类型的对象:产品和品牌 我想选择我的产品。我希望我的品牌不可选择 这两种类型都有自己的数据模板 默认情况下,可以选择任何内容: <ListBox ... > <ListBox.Resources> <DataTemplate DataType="{x:Type local:Product}"> ... </DataTemplate> <Da

我的WPF列表框包含两种类型的对象:产品和品牌

我想选择我的产品。我希望我的品牌不可选择

这两种类型都有自己的数据模板

默认情况下,可以选择任何内容:

<ListBox ... >
    <ListBox.Resources>
        <DataTemplate DataType="{x:Type local:Product}">
            ...
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:Brand}">
            ...
        </DataTemplate>
    </ListBox.Resources>
</ListBox>
<ListBox ... >
    <ListBox.Resources>
        ...
        <Style TargetType="{x:Type ListBoxItem}">
            <Setter Property="Focusable" Value="False" />
        </Style>
    </ListBox.Resources>
</ListBox>

...
...
我可以使用Setter设置焦点,但不能选择任何内容:

<ListBox ... >
    <ListBox.Resources>
        <DataTemplate DataType="{x:Type local:Product}">
            ...
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:Brand}">
            ...
        </DataTemplate>
    </ListBox.Resources>
</ListBox>
<ListBox ... >
    <ListBox.Resources>
        ...
        <Style TargetType="{x:Type ListBoxItem}">
            <Setter Property="Focusable" Value="False" />
        </Style>
    </ListBox.Resources>
</ListBox>

...
我不能将Setter放在DataTemplate中

我无法将数据类型添加到样式中


如何仅为品牌类型的ListBoxItems设置样式?

由于使用了StyleSelector类,您可以根据ItemContainerStyle的数据类型附加样式。这里有一个很好的例子:

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

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