在具有垂直方向的 StackPanel 内水平拉伸 Grid

Horizontally stretch a Grid inside a StackPanel with Vertical orientation

我试图让这个侧边栏中的网格填充作为堆栈面板的侧边栏。根据 这是不可能的。

我的场景略有不同,因为我实际上有一个 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>

结果如下所示:

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

非常感谢

您需要将 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>

Ps。考虑使用 ObservableCollection 而不是 List<String> 以防 younplane 使用 MVVM

更新这些元素