Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有在XAML中指定的可本地化ComboBoxItems的ComboBox_C#_Wpf_Xaml_Combobox_Markup Extensions - Fatal编程技术网

C# 具有在XAML中指定的可本地化ComboBoxItems的ComboBox

C# 具有在XAML中指定的可本地化ComboBoxItems的ComboBox,c#,wpf,xaml,combobox,markup-extensions,C#,Wpf,Xaml,Combobox,Markup Extensions,我有一个组合框,我想用一个枚举的成员填充它,用本地化的代表字符串。我知道这样做的标准方法是在codebehind中创建一个字典,使用枚举值作为键,文本作为值,然后将ItemsSource设置为该值。但那样我就不能用我的性感加价扩展了。所以,我想用XAML来做这个。我想这很容易;以下是我所拥有的: <ComboBox x:Name="cmbNewTabPos" DisplayMemberPath="Content" Select

我有一个组合框,我想用一个枚举的成员填充它,用本地化的代表字符串。我知道这样做的标准方法是在codebehind中创建一个字典,使用枚举值作为键,文本作为值,然后将ItemsSource设置为该值。但那样我就不能用我的性感加价扩展了。所以,我想用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”
。用于指定要从选定对象显示的值。所选对象不是所选ComboxItem,而是所选ComboxItem的
Content
属性中的对象。但是从您的代码中,我可以看到ComboBoxItems中的对象只有两个名为
“Key”
“Index”
的属性。
希望这有帮助。如果我误解了,请告诉我。

我写了这个小例子,效果很好

<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”
。用于指定要从选定对象显示的值。所选对象不是所选ComboxItem,而是所选ComboxItem的
Content
属性中的对象。但是从您的代码中,我可以看到ComboBoxItems中的对象只有两个名为
“Key”
“Index”
的属性。
希望这有帮助。如果我误解了,请让我知道。

事实证明,问题恰恰在于
DisplayeMemberPath=“Content”
。只要从我发布的代码中删除这一行,它就可以完美地工作。谢谢你给我指明了正确的方向!事实证明,
displayemberpath=“Content”
恰恰是问题所在。只要从我发布的代码中删除这一行,它就可以完美地工作。谢谢你给我指明了正确的方向!