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>

它几乎奏效了;下拉列表填充正确,绑定正在工作,当我下拉下拉列表时,我可以看到所选的值,但无论我做什么,组合框的框部分都保持空白。我做错了什么?

XAML中指定的具有可本地化ComboBoxItems的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"的属性。希望得到帮助。如果我误解了,请告诉我。