ComboBox с локализуемыми элементами ComboBox, указанными в XAML - PullRequest
0 голосов
/ 17 января 2012

У меня есть ComboBox, который я хотел бы заполнить членами перечисления, локализованными репрезентативными строками.Я знаю, что стандартный способ сделать это - создать словарь в codebehind со значениями enum в качестве ключей и текстом в качестве значений, а затем установить для него 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>

Это почти работает;выпадающий список заполнен правильно, привязка работает, я вижу выбранное значение, когда выпадаю раскрывающийся список, но часть поля в выпадающем списке остается пустой независимо от того, что я делаю.Что я тут не так делаю?

1 Ответ

3 голосов
/ 17 января 2012

Я пишу этот маленький пример, и он отлично работает.

<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, но находится в Content свойстве выбранного ComboBoxItem.Но из вашего кода я вижу, что объект в ваших ComboBoxItems имеет только два свойства с именами "Key" и "Index".Надеюсь, это поможет.Если я неправильно понял, пожалуйста, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...