Wpf 组合框中所选项目的文本将不显示
问这个问题我觉得很愚蠢,但我已经打了8个多小时了。如何使选中的项目在选中时在我的WPF组合框中显示其文本 上面是一个选项对话框,允许用户选择和配置可用的锦标赛显示。问题是所选组合框项显示的是UserControl而不是显示名称 加载窗口时:Wpf 组合框中所选项目的文本将不显示,wpf,windows,wpf-controls,Wpf,Windows,Wpf Controls,问这个问题我觉得很愚蠢,但我已经打了8个多小时了。如何使选中的项目在选中时在我的WPF组合框中显示其文本 上面是一个选项对话框,允许用户选择和配置可用的锦标赛显示。问题是所选组合框项显示的是UserControl而不是显示名称 加载窗口时: //_displayer is a private member populated using MEF //[ImportMany(typeof (IDisplayer))] //private IEnu
//_displayer is a private member populated using MEF
//[ImportMany(typeof (IDisplayer))]
//private IEnumerable<IDisplayer> _displayers;
DisplayTypeComboBox.ItemsSource = _displayers;
尝试使用TextBlock绑定到DisplayerName,而不是ComboboxItem。我相信当您设置itemsource时,combo控件会自动将项目包装在comboboxitems控件中
编辑:我误解了你的问题。尝试设置SelectionBoxItemTemplate。检查DisplayerName成员实际包含的内容。很可能它包含的是用户控件名而不是显示名。我甚至不想去想我花了多少时间试图解决一个简单的问题。为什么要使选定文本显示为选定值如此困难?我放弃了,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>
我遇到了同样的事情。我也花了一段时间( 您应该使用ItemContainerStyle,而不是ItemTemplate。
因为ComboBox用ComboBoxItem包装内部项目-基本上用另一个包装ComboxItem。DipslayerName字段确实有有效字符串。下拉列表中的项目包含正确的DisplayerName字符串,即“限定滚动排名”,一旦选中,我就不知道如何告诉控件使用DisplayerName字段作为所选的显示值。DisplayTypeComboBox\u SelectionChanged方法的代码是什么样子的?用户更改SelectedItem后,您是否会弄乱它?它只是设置了很长的描述。SelectedDisplayer=(IDisplayer)DisplayTypeComboBox.SelectedItem;如果(SelectedDisplayer!=null)LongDescriptionLabel.Text=SelectedDisplayer.DisplayerDescription;到目前为止,我已经尝试了ComboBoxItem、TextBlock和Label。它们都会产生相同的结果。你能链接吗?例如,我不能像设置ItemTemplate那样设置它。我所有的谷歌搜索都没有显示任何简单和干净的内容。SelectionBoxItemTemplate属性是属性。很遗憾,它是私有的。请尝试创建您自己的组合框样式,并将SelectionBoxItemTemplate设置为您所需的样式。嗯,我肯定缺少一些东西,我似乎无法使用ItemContainerStyle对绑定数据进行模板化
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();
}
<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>