C# UWP组合框SelectedValue未设置

C# UWP组合框SelectedValue未设置,c#,xaml,combobox,uwp,selectedvalue,C#,Xaml,Combobox,Uwp,Selectedvalue,显然,我不理解使用SelectedValue来更改组合框在UWP中显示的项目 XAML很简单 <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <ComboBox x:Name="comboBoxColor" /> </Grid> 背后的代码不是很深 public MainPage() { this.InitializeC

显然,我不理解使用SelectedValue来更改组合框在UWP中显示的项目

XAML很简单

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <ComboBox x:Name="comboBoxColor" />
</Grid>

背后的代码不是很深

    public MainPage()
    {
        this.InitializeComponent();
    }

    public void page_Loaded(object sender, RoutedEventArgs e)
    {
        populateDdlMultiColor();

        comboBoxColor.SelectedValue = Colors.Red;
        //comboBoxColor.SelectedIndex = 0 works tho
    }

    private void populateDdlMultiColor()
    {
        comboBoxColor.ItemsSource = ColorDict();
        comboBoxColor.DisplayMemberPath = "Key";
        comboBoxColor.SelectedValuePath = "Value";


    }

    private Dictionary<string,Color> ColorDict()
    {
        Dictionary<string, Color> L = new Dictionary<string, Color>();
        L.Add("reddish",Colors.Red);

        return L;
    }
public主页()
{
this.InitializeComponent();
}
已加载公共无效页(对象发送方,路由目标e)
{
填充的dlmulticolor();
comboBoxColor.SelectedValue=Colors.Red;
//comboBoxColor.SelectedIndex=0适用于
}
private void populateDdlMultiColor()
{
comboBoxColor.ItemsSource=ColorDict();
comboBoxColor.DisplayMemberPath=“键”;
comboBoxColor.SelectedValuePath=“Value”;
}
专用字典ColorDict()
{
字典L=新字典();
L.添加(“略带红色”,颜色为红色);
返回L;
}

这显然是tinker toy,但它失败的方式与我的代码失败的方式相同:设置SelectedValue后,组合框位于索引-1上,SelectedValue为null。如果我将SelectedIndex设置为一个合适的值[请参阅注释],组合框将工作-它已加载。

感谢您的反馈。这是一个不适用于枚举类型的已知问题

现在,作为一种解决方法,您可以使用或像以前那样使用。但是,请注意,
字典
是作为哈希表实现的。在
字典中没有这样的“索引”概念。订单没有定义,我们不能依赖它。因此,对于您的场景,使用
SelectedItem
可能会更好


有关更多信息,请参见。

感谢周杰伦让我走上正轨!在我的场景中,将颜色转换为整数非常容易,这是解决已知问题的一个方法。不会适用于所有枚举,但是任何在UWP中构建颜色下拉列表的人都会发现这很方便。注意字典的变化

    public MainPage()
    {
        this.InitializeComponent();
    }

    public void page_Loaded(object sender, RoutedEventArgs e)
    {
        populateDdlMultiColor();

        comboBoxColor.SelectedValue = ColorInt(Colors.Red);
    }

    private void populateDdlMultiColor()
    {
        comboBoxColor.ItemsSource = ColorDict();
        comboBoxColor.DisplayMemberPath = "Key";
        comboBoxColor.SelectedValuePath = "Value";


    }

    private Dictionary<string,int> ColorDict()
    {
        Dictionary<string, int> L = new Dictionary<string, int>();
        L.Add("reddish",ColorInt(Colors.Red));

        return L;
    }

    private int ColorInt(Color c)
    {

        return (c.A*16777216) + (c.R*65536) + (c.G*256) + c.B ;
    }
public主页()
{
this.InitializeComponent();
}
已加载公共无效页(对象发送方,路由目标e)
{
填充的dlmulticolor();
comboBoxColor.SelectedValue=ColorInt(Colors.Red);
}
private void populateDdlMultiColor()
{
comboBoxColor.ItemsSource=ColorDict();
comboBoxColor.DisplayMemberPath=“键”;
comboBoxColor.SelectedValuePath=“Value”;
}
专用字典ColorDict()
{
字典L=新字典();
L.添加(“红色”,ColorInt(Colors.Red));
返回L;
}
专用整型颜色整型(c色)
{
返回(c.A*16777216)+(c.R*65536)+(c.G*256)+c.B;
}