在具有垂直方向的 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。可能吗?
非常感谢
您需要将 HorizontalContentAlignment 设置为 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
更新这些元素
我试图让这个侧边栏中的网格填充作为堆栈面板的侧边栏。根据
我的场景略有不同,因为我实际上有一个 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。可能吗?
非常感谢
您需要将 HorizontalContentAlignment 设置为 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