文本不会显示ComboBox中的选定项目

时间:2009-05-11 18:10:51

标签: wpf windows wpf-controls

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

Diplay Options

上面是一个选项对话框,允许用户选择和配置可用的锦标赛显示。问题是所选的组合框项目显示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();
}

4 个答案:

答案 0 :(得分:1)

我遇到了同样的事情。我也花了一会儿。 :( 您应该使用ItemContainerStyle而不是ItemTemplate。 因为ComboBox使用ComboBoxItem包装内部项 - 您基本上将ComboBoxItem包装为另一个。

答案 1 :(得分:0)

尝试使用TextBlock绑定到DisplayerName而不是ComboboxItem。我相信当你设置itemsource时,组合控件会自动将项目包装在comboboxitems控件中。

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

答案 2 :(得分:0)

检查DisplayerName成员实际包含的内容。它很可能包含UserControl名称而不是显示名称。

答案 3 :(得分:0)

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