0

我有一个 ComboBox,我想用枚举成员填充它,并使用本地化的代表字符串。我知道执行此操作的标准方法是在代码隐藏中创建一个字典,其中枚举值作为键,文本作为值,然后将 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>

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

4

1 回答 1

4

我写了这个小例子,它工作正常。

<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,而是所选 ComboBoxItem 的Content属性中的内容。但是从您的代码中,我可以看到 ComboBoxItems 中的该对象只有两个名为"Key"和的属性"Index"。希望这有帮助。如果我误解了,请告诉我。

于 2012-01-17T19:34:44.050 回答