我显然没有掌握使用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;
}
这显然是修补玩具,但它失败的方式与我的代码失败相同:设置SelectedValue后,组合框的索引为-1,SelectedValue为null。如果我将SelectedIndex设置为正确的值[请参阅注释],组合框可以正常工作 - 它已被加载。
答案 0 :(得分:1)
感谢您的反馈。这是SelectedValue无法使用枚举类型的已知问题。
目前,作为一种解决方法,您可以像使用SelectedIndex或SelectedItem一样使用。但请注意,Dictionary
是作为哈希表实现的。没有这样一个&#34;指数&#34;的概念。在Dictionary
内。订单未定义,我们无法依赖它。因此,对于您的方案,使用SelectedItem
可能会更好。
有关详细信息,请参阅this answer。
答案 1 :(得分:0)
感谢Jay Zuo让我走上正轨!在我的场景中,它很容易将颜色转换为整数作为已知问题的解决方法。不会为每个枚举工作,但任何建立颜色下拉的人[在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 ;
}