Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 组合框中所选项目的文本将不显示_Wpf_Windows_Wpf Controls - Fatal编程技术网

Wpf 组合框中所选项目的文本将不显示

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

问这个问题我觉得很愚蠢,但我已经打了8个多小时了。如何使选中的项目在选中时在我的WPF组合框中显示其文本

上面是一个选项对话框,允许用户选择和配置可用的锦标赛显示。问题是所选组合框项显示的是UserControl而不是显示名称

加载窗口时

        //_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>