ComboBox显示错误的字符串列表

时间:2016-08-23 08:30:14

标签: c# wpf xaml combobox

在XAML中,我将ComboBox绑定到名为List的{​​{1}}个字符串,我在名为Tags的静态类中使用了该字符串。 这是XAML:

Settings

这是我的<Window x:Class="CSV_To_Tags_App.Window2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:loc="clr-namespace:CSV_To_Tags_App" Title="Window2" Height="435" Width="566"> <Grid> <StackPanel Orientation="Horizontal" DataContext="x:Static loc:Settings"> <ItemsControl ItemsSource="{x:Static loc:Settings.Tags}"> <ItemsControl.ItemTemplate> <DataTemplate> <ComboBox ItemsSource="{Binding}"/> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </StackPanel> </Grid> </Window> 课程:

Settings

所以,我想要一个显示public static class Settings { public static List<string> Tags = new List<string>() { "Header1", "Header2", "Header3", "Header4" }; } 列表的combobox。 我使用Tags,因为稍后我必须显示更大的对象列表,并且每个对象旁边都会显示DataTemplate

相反,我得到了这个:

enter image description here

我得到四个ComboBox,每个ComboBoxes都包含我放在列表中的标签字母。因此,第一个ComboBox包含字母H-e-a-d-d-e-r-1,第二个包含H-e-a-d-d-e-r-2,依此类推。

我宁愿想要一个包含所有四个标签的ComboBox

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

出于此目的,您无需使用StackPanel。您只需要一个ComboBox并将其设置为ItemsSource。像这样:

<ComboBox ItemsSource="{x:Static loc:Settings.Tags}" VerticalAlignment="Top"/>

如果您想使用DataTemplate,可以像这样使用它:

<ComboBox ItemsSource="{x:Static loc:Settings.Tags}" VerticalAlignment="Top">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding}"></TextBlock>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

答案 1 :(得分:1)

您无需物品控制即可正常工作。只需一个组合框就可以在StackPanel内部工作了。检查以下代码:

<Grid>
    <StackPanel Orientation="Horizontal" DataContext="x:Static loc:Settings">
        <ComboBox VerticalAlignment="Top" ItemsSource="{x:Static loc:Settings.Tags}" />
    </StackPanel>
</Grid>