WPF:某些 Expression Blend 主题导致组合框出现错误 binding/display
WPF: Some Expression Blend themes causing bugs in Combobox binding/display
在我的视图模型中,我绑定的 属性 是:
Products = new Dictionary<string, string>(){
{"0001", "Test Product 1"},
{"0002", "Test Product 2"},
{"0003", "Test Product 3"}
};
在我的 xaml 中,我有以下绑定:
<ComboBox Grid.Row="1" Grid.Column="1" DisplayMemberPath="Value" SelectedValuePath="Key" VerticalAlignment="Center"
ItemsSource="{Binding Path=DataContext.Products, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}"/>
此外,在我的 xaml 中,我加载了我的资源词典,包括表达式混合主题,如下所示:
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="AppResourceDict.xaml" />
<ResourceDictionary Source="Themes/ExpressionLight.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
上面的效果很好。但是,如果我将 "Themes/ExpressionLight.xaml" 更改为 "Themes/BureauBlue.xaml" 或 "Themes/BureauBlack.xaml",组合框下拉列表中显示的是:
["0001","Test Product 1"]
["0002","Test Product 2"]
["0003","Test Product 3"]
这些主题以某种方式导致组合框同时显示键 + 值。这是一个错误吗?有人知道怎么解决吗?
看起来这是 XAML 中的错误。有一个解决方法,但它需要更改 xaml:https://wpf.codeplex.com/workitem/10129
这是主题中的错误。您可以修改主题中的控件模板,也可以在组合框中使用 ItemTemplate:
<DataTemplate x:Key="ValueDataTemplate">
<TextBlock Text="{Binding Value}" />
</DataTemplate>
<ComboBox ItemTemplate="{StaticResource ValueDataTemplate}" SelectedValuePath="Key"
ItemsSource="{Binding Products}" />
在我的视图模型中,我绑定的 属性 是:
Products = new Dictionary<string, string>(){
{"0001", "Test Product 1"},
{"0002", "Test Product 2"},
{"0003", "Test Product 3"}
};
在我的 xaml 中,我有以下绑定:
<ComboBox Grid.Row="1" Grid.Column="1" DisplayMemberPath="Value" SelectedValuePath="Key" VerticalAlignment="Center"
ItemsSource="{Binding Path=DataContext.Products, RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}"/>
此外,在我的 xaml 中,我加载了我的资源词典,包括表达式混合主题,如下所示:
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="AppResourceDict.xaml" />
<ResourceDictionary Source="Themes/ExpressionLight.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
上面的效果很好。但是,如果我将 "Themes/ExpressionLight.xaml" 更改为 "Themes/BureauBlue.xaml" 或 "Themes/BureauBlack.xaml",组合框下拉列表中显示的是:
["0001","Test Product 1"]
["0002","Test Product 2"]
["0003","Test Product 3"]
这些主题以某种方式导致组合框同时显示键 + 值。这是一个错误吗?有人知道怎么解决吗?
看起来这是 XAML 中的错误。有一个解决方法,但它需要更改 xaml:https://wpf.codeplex.com/workitem/10129
这是主题中的错误。您可以修改主题中的控件模板,也可以在组合框中使用 ItemTemplate:
<DataTemplate x:Key="ValueDataTemplate">
<TextBlock Text="{Binding Value}" />
</DataTemplate>
<ComboBox ItemTemplate="{StaticResource ValueDataTemplate}" SelectedValuePath="Key"
ItemsSource="{Binding Products}" />