WPF stackpanel不显示整个内容

时间:2016-01-22 16:10:05

标签: c# wpf stackpanel

我正在使用Combobox来显示两个不同列表的内容,List< Production>制作和列表< Seasons>季节。以下是XAML代码

<StackPanel Grid.Column=" 1" Grid.Row="2">
            <ComboBox x:Name="comboBox" ItemsSource="{Binding ShowProductionsSeasonsNames}" SelectedItem="{Binding SelectedProductionsSeasons}">
                <ComboBox.GroupStyle>
                    <GroupStyle>
                        <GroupStyle.HeaderTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding Name}" FontWeight="Bold" FontSize="14"/>
                            </DataTemplate>
                        </GroupStyle.HeaderTemplate>
                    </GroupStyle>
                </ComboBox.GroupStyle>
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Name}"/>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>
        </StackPanel>

这是viewmodel中的代码。

public ListCollectionView ShowProductionsSeasonsNames
{
    get
    {
        List<ProductionsSeasonsNames> items = new List<ProductionsSeasonsNames>();

        foreach (var production in this.Productions)
        {
            items.Add(new ProductionsSeasonsNames() { Name = production.DisplayName, Category = "Productions" });
        }
        foreach (var seasons in this.Seasons)
        {
            items.Add(new ProductionsSeasonsNames() { Name = seasons.DisplayName, Category = "Seasons" });
        }

        ListCollectionView lcv = new ListCollectionView(items);
        lcv.GroupDescriptions.Add(new PropertyGroupDescription("Category"));
        return lcv;
    }
}

public class ProductionsSeasonsNames
{
    public string Name { get; set; }
    public string Category { get; set; }
}

我的问题是部分有效。虽然我的作品和季节列表每个包含大约100个项目,但在堆叠面板中,每个列表只显示15个。此外,当我向下或向上滚动时,焦点直接转到每个标题的顶部,而不让我实际滚动(很抱歉,我无法更好地解释这部分)。有没有人对此有任何想法?

1 个答案:

答案 0 :(得分:0)

使用Grid而不是Stackpanel并设置网格高度=&#34; *&#34;或者你可以直接将你的组合框放入Grid.Column =&#34; 1&#34; Grid.Row =&#34; 2&#34;