XAML中指定的具有可本地化ComboBoxItems的ComboBox
本文关键字:本地化 ComboBoxItems ComboBox XAML | 更新日期: 2023-09-27 18:20:25
我有一个ComboBox,我想用枚举的成员和本地化的代表字符串填充它。我知道这样做的标准方法是在codeehind中创建一个Dictionary,将枚举值作为键,将文本作为值,然后将ItemsSource设置为该值。但是那样我就不能使用我性感的MarkupExtension了。所以,我想在XAML中这样做。我以为这会很容易;这是我的
<ComboBox x:Name="cmbNewTabPos"
DisplayMemberPath="Content"
SelectedValue="{Binding Path=NewTabPosition}"
SelectedValuePath="Tag">
<ComboBoxItem
Content="{qt:Resx Key=SomeKey, Index=0}"
Tag="{x:Static qt:TabPos.Left}"/>
<ComboBoxItem
Content="{qt:Resx Key=SomeKey, Index=1}"
Tag="{x:Static qt:TabPos.Right}"/>
<ComboBoxItem
Content="{qt:Resx Key=SomeKey, Index=2}"
Tag="{x:Static qt:TabPos.Leftmost}"/>
<ComboBoxItem
Content="{qt:Resx Key=SomeKey, Index=3}"
Tag="{x:Static qt:TabPos.Rightmost}"/>
</ComboBox>
它几乎奏效了;下拉列表填充正确,绑定正在工作,当我下拉下拉列表时,我可以看到所选的值,但无论我做什么,组合框的框部分都保持空白。我做错了什么?
我写了这个小例子,它运行得很好。
<Window x:Class="MainWindowCommandBinding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.Resources >
<Point x:Key="1_2" X="1" Y="2"/>
<Point x:Key="1_3" X="1" Y="3"/>
<Point x:Key="1_4" X="1" Y="4"/>
<Point x:Key="1_5" X="1" Y="5"/>
</Grid.Resources>
<ComboBox x:Name="cmbNewTabPos"
DisplayMemberPath="Y"
SelectedValuePath="Tag"
SelectedValue="1"
Margin="0,12,0,0" HorizontalAlignment="Left" Width="135" Height="37" VerticalAlignment="Top">
<ComboBoxItem Content="{StaticResource ResourceKey=1_2}" Tag="1"/>
<ComboBoxItem Content="{StaticResource ResourceKey=1_3}" Tag="2"/>
<ComboBoxItem Content="{StaticResource ResourceKey=1_4}" Tag="3"/>
<ComboBoxItem Content="{StaticResource ResourceKey=1_5}" Tag="4"/>
</ComboBox>
</Grid>
我认为您没有正确使用DisplayeMemberPath="Content"
。用于指定要从选定对象中显示的值。所选对象不是所选ComboBoxItem,而是所选CombeBoxItem的Content
属性中的对象。但从您的代码中,我可以看到ComboBoxItems中的对象只有两个名为"Key"
和"Index"
的属性。希望得到帮助。如果我误解了,请告诉我。