在垂直方向上水平拉伸StackPanel中的网格

时间:2019-02-22 09:37:25

标签: wpf stackpanel

我正在尝试使此侧栏中的网格填充为堆栈面板的侧栏。根据{{​​3}},这无法完成。

我的情况稍有不同,因为我实际上有一个ListView,其中StackPanel作为ItemsContainer。

我敲了一个简单的例子来演示:

C#

public partial class MainWindow : Window
{
    public List<string> MyList { get; set; }

    public MainWindow()
    {
        InitializeComponent();

        this.MyList = new List<string> { "foo", "bar", "baz" };
        this.DataContext = this;
    }
}

XAML

    <ListView ItemsSource="{Binding MyList}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid  Background="Orange" 
                       HorizontalAlignment="Stretch">
                    <TextBlock Margin="5"                                    
                               Text="{Binding}"></TextBlock>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Background="Yellow"></StackPanel>
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
    </ListView>

结果如下:

this answer

在这里采取的最佳方法是什么?我希望菜单项绑定到动态列表并水平拉伸。我还希望避免在网格中硬编码多个RowDefinition,而不要使用StackPanel。有可能吗?

非常感谢

1 个答案:

答案 0 :(得分:1)

您需要将Horizo​​ntalContentAlignment设置为strech 它的默认行为是将所有内容都放在左侧:

        <ListView ItemsSource="{Binding MyList}" HorizontalContentAlignment="Stretch">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <Grid  Background="Orange">
                        <TextBlock Text="{Binding}"></TextBlock>
                    </Grid>
                </DataTemplate>
            </ListView.ItemTemplate>
            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Background="Yellow"></StackPanel>
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>
        </ListView>

enter image description here

Ps。考虑使用ObservableCollection代替List<String>,以防您使用MVVM更新这些元素

相关问题