我认为在使用DisplayMemberPath =" Value"时,Windows应用商店应用存在一个错误。
这是我的代码
<ComboBox Height="40" VerticalAlignment="Stretch" SelectedValuePath="Key" DisplayMemberPath="Value" x:Name="comboBox1" FontSize="25"/>
var source = new Dictionary<string, double>();
source.Add("Item1", 0.4);
source.Add("Item2", 0.3);
source.Add("Item3", 0.1);
source.Add("Item4", 0.1);
var formateDSource = new Dictionary<string, string>();
foreach (var item in source)
{
formateDSource.Add(string.Format("[{0}, {1}]", item.Key, item.Value), item.Key);
}
comboBox1.ItemsSource = source;
如果您在WPF中使用此代码完美无缺。但是,如果在Windows应用商店应用程序中使用此代码,则组合框为空并且会引发错误。那么在Windows应用商店应用程序中是否有另一种方法可以解决这个问题?因为我已经对网络进行了几天的研究并且没有找到解决方案。*请不要发表评论,除非您已将我的代码作为Windows应用商店应用而不是Visual Studio中的WPF。
答案 0 :(得分:0)
我已经能够在通用应用程序(Windows手机版)中重现它。
要解决此问题,请首先删除组合框中的“高度”属性值,因为它会阻止组合框在您打开它时显示选项(至少在Windows Phone上)。
然后,在您的代码中,尝试将您的Dictionnary转换为对象的列表(或另一个Dictionnary)(我使用匿名对象,但您最好创建自定义类型):
comboBox1.ItemsSource = formateDSource.Select(f => new { Key = f.Key, Value = f.Value }).ToList();
所以我的xaml看起来像这样:
<ComboBox x:Name="comboBox1"
VerticalAlignment="Stretch"
DisplayMemberPath="Value"
FontSize="25"
SelectedValuePath="Key" />
现在,我真的不明白原始词典会发生什么,但至少你现在应该有一个解决方法。