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のオブジェクトにはとという名前の2つのプロパティしかないことがわかり"Key"ます"Index"。この助けを願っています。誤解された場合はお知らせください。

于 2012-01-17T19:34:44.050 に答える