我问这个问题真的很愚蠢,但是我已经打了8个多小时了。 如何选中项目以在选中时在我的WPFcombobox中显示其文本?
以上是一个选项对话框,允许用户select和configuration可用的锦标赛显示。 问题是selectcombobox项目显示UserControl而不是显示名称。
在窗口加载 :
//_displayer is a private member populated using MEF //[ImportMany(typeof (IDisplayer))] //private IEnumerable<IDisplayer> _displayers; DisplayTypeComboBox.ItemsSource = _displayers;
ComboBox Xaml:
<ComboBox Name="DisplayTypeComboBox" Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1" IsEditable="False" SelectionChanged="DisplayTypeComboBox_SelectionChanged"> <ComboBox.ItemTemplate> <DataTemplate> <ComboBoxItem Content="{Binding DisplayerName}" /> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox>
IDisplayer:
public interface IDisplayer { string DisplayDataLocation { get; set; } string DisplayerName { get; } string DisplayerDescription { get;} bool WatcherEnabled { get; } UserControl View { get; } string DisplayerImageLeft { get; set; } string DisplayerImageRight { get; set; } void Update(); }
我遇到了同样的事情。 花了我一会儿。 (你应该使用ItemContainerStyle而不是ItemTemplate。因为ComboBox用ComboBoxItem包装内部项目 – 你基本上用另一个包装了ComboBoxItem。
检查显示名称成员实际包含的内容。 它最有可能包含UserControl名称而不是显示名称。
尝试使用TextBlock绑定到DisplayerName而不是ComboboxItem。 我相信,当您设置itemsource时,组合控件将自动包裹在组合控件项目控件中的项目。
编辑:我误解了你的问题。 尝试设置SelectionBoxItemTemplate。
我甚至不想考虑花了多少小时来解决一个简单的问题。 为什么很难让选定的文本显示为选定的值? 我放弃了,WPF你打我提交。 我改变了控制列表框它占用更多的空间来显示可选项目,但至少它的工作原理。
<ListBox Name="DisplayTypeComboBox" Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1" SelectionChanged="DisplayType_SelectionChanged"> <ListBox.ItemTemplate> <DataTemplate> <Label Content="{Binding DisplayerName}" /> </DataTemplate> </ListBox.ItemTemplate> </ListBox>