Wpf 多选组合框,强制它始终显示相同的文本
我有一个多选组合框,效果很好。除了文本。我希望它总是有相同的文本(“商品过滤器”),无论用户选择了什么 如果我将iseditable设置为true,将文本设置为CommodityFilter,则在用户做出选择之前,它看起来很好,然后它就是垃圾(显示对象类型名称)。我如何在那里硬编码一些文本?(实际上,理想情况下,我会对其进行数据绑定,这样它就可以根据是否选择了任何内容进行更改,但在这一点上,这将是一个额外的好处)Wpf 多选组合框,强制它始终显示相同的文本,wpf,Wpf,我有一个多选组合框,效果很好。除了文本。我希望它总是有相同的文本(“商品过滤器”),无论用户选择了什么 如果我将iseditable设置为true,将文本设置为CommodityFilter,则在用户做出选择之前,它看起来很好,然后它就是垃圾(显示对象类型名称)。我如何在那里硬编码一些文本?(实际上,理想情况下,我会对其进行数据绑定,这样它就可以根据是否选择了任何内容进行更改,但在这一点上,这将是一个额外的好处) 我最终创建了一个用于填充组合框的自定义对象(它有IsSelected属性并实现了I
我最终创建了一个用于填充组合框的自定义对象(它有
IsSelected
属性并实现了INotifyPropertyChanged
),因为我创建了几个组合框来控制过滤。一旦我这样做了,覆盖customobject上的tostring并传入适当的文本就很简单了。因此xaml没有太大变化
我本想用一个文本框来覆盖,但这似乎超出了我的能力,无法在合理的时间内获得一个精美的外观
<ComboBox ItemsSource="{Binding Path=ActiveFuturesMonths}"
IsEditable="True"
IsReadOnly="True"
Text="Futures Month Filter" >
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected}"
Width="20" />
<TextBlock Text="{Binding Text}"
Width="100" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
事实上关键在于设置- IsEditable=“True” IsReadOnly=“True” Text=“期货月份过滤器”
而不是创建自定义对象。非常感谢它的帮助。AFAIK,您必须提取组合框的模板,并对其进行自定义才能完成此操作。MSDN示例:显示的文本使用与下拉列表相同的ItemTemplate。它向您显示的是对象名,而不是您想要的,因为它不知道要在复杂对象中公开哪个属性。如果你想做你所说的,那就用另一个文本框覆盖这个组合框。@Xcalibur37你的解决方案(用另一个文本框覆盖这个组合框)太明显了,会有伤害。我会张贴它作为答案,一旦我有它看起来漂亮。除非有更好的事情发生。@PatFromCanada:好吧,或者code4life建议的那样就可以了。这实际上取决于您希望如何覆盖模板。如果您能看到项目代码4Life之外的一些可重用性,那么Life的解决方案就是一条出路。
<ComboBox ItemsSource="{Binding Path=ActiveFuturesMonths}"
IsEditable="True"
IsReadOnly="True"
Text="Futures Month Filter" >
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected}"
Width="20" />
<TextBlock Text="{Binding Text}"
Width="100" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>