代码之家  ›  专栏  ›  技术社区  ›  Aaron

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

  •  1
  • Aaron  · 技术社区  · 15 年前

    我问这个真的很傻,但我已经打了8个多小时了。如何让所选项目在选中时在我的WPF组合框中显示其文本?

    Diplay Options

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

    窗口加载时 :

            //_displayer is a private member populated using MEF
            //[ImportMany(typeof (IDisplayer))] 
            //private IEnumerable<IDisplayer> _displayers;
            DisplayTypeComboBox.ItemsSource = _displayers;
    

    组合框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();
    }
    
    4 回复  |  直到 15 年前
        1
  •  1
  •   Arielr Wayne    15 年前

    我也遇到过同样的事情。我也花了点时间。:( 您应该使用itemcontainerStyle而不是itemTemplate。 因为ComboBox用ComboBoxitem包装内部项,所以基本上用另一个Comboxitem包装。

        2
  •  0
  •   Wallstreet Programmer    15 年前

    检查displayername成员实际包含的内容。很可能它包含用户控件名称而不是显示名称。

        3
  •  0
  •   mdm20    15 年前

    尝试使用文本块绑定到DisplayerName,而不是ComboBoxitem。我相信当您设置itemsource时,组合控件将自动包装comboxitems控件中的项。

    编辑:我误解了你的问题。尝试设置SelectionBoxItemTemplate。

        4
  •  0
  •   Community c0D3l0g1c    7 年前

    我甚至不想考虑我花了多少时间来解决一个简单的问题。为什么很难让所选文本显示为所选值?我放弃了,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>
    

    alt text