如何为特定数据类型的 ListBoxItems 应用样式设置器?
我的 WPF ListBox 包含两种类型的对象:产品和品牌。
我希望我的产品可供选择。我希望我的品牌不可选择。
这两种类型都有自己的 DataTemplate。
默认情况下,任何内容都可以被选择:
<ListBox ... >
<ListBox.Resources>
<DataTemplate DataType="{x:Type local:Product}">
...
</DataTemplate>
<DataTemplate DataType="{x:Type local:Brand}">
...
</DataTemplate>
</ListBox.Resources>
</ListBox>
我可以使用 Setter 设置 Focusable,但是什么都不能选择:
<ListBox ... >
<ListBox.Resources>
...
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Focusable" Value="False" />
</Style>
</ListBox.Resources>
</ListBox>
我无法将 Setter 放入 DataTemplate 中。
我无法将数据类型放入样式中。
如何仅设置 Brand 类型的 ListBoxItems 的样式?
My WPF ListBox contains two types of object: Product and Brand.
I want my Products selectable. I want my Brands not selectable.
Each of the two types has its own DataTemplate.
By default, anything may be selected:
<ListBox ... >
<ListBox.Resources>
<DataTemplate DataType="{x:Type local:Product}">
...
</DataTemplate>
<DataTemplate DataType="{x:Type local:Brand}">
...
</DataTemplate>
</ListBox.Resources>
</ListBox>
I can set Focusable with a Setter, but then nothing may be selected:
<ListBox ... >
<ListBox.Resources>
...
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Focusable" Value="False" />
</Style>
</ListBox.Resources>
</ListBox>
I cannot put the Setter within the DataTemplate.
I cannot put a DataType onto the Style.
How do I style only the ListBoxItems of type Brand?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
借助 StyleSelector 类,您可以根据 ItemContainerStyle 的数据类型附加样式。这里有一个非常好的例子: http://www .telerik.com/help/wpf/common-data-binding-style-selectors.html
Thanks to the StyleSelector class you can attach styles depending on type of data for the ItemContainerStyle. There is a really good example here : http://www.telerik.com/help/wpf/common-data-binding-style-selectors.html
您可以在 ListBoxItem 样式上使用数据触发器吗?如果是这样,请绑定到 DataContext(您的类)并使用值转换器来测试类型。如果您对此感兴趣,请设置 ListBoxItem 的样式,使其不会显示为选中状态。
我认为您不能在没有代码隐藏或自定义行为的情况下禁止选择选择器(列表框的父级)中的项目。
Can you use a data trigger on your ListBoxItem style? If so, bind to the DataContext (your class) and use a value converter to test the type. If it's the one you're interested in, style the ListBoxItem so that it cannot appear selected.
I don't think you can disallow selection of an item in a Selector (parent of ListBox) without codebehind or a custom Behavior.