[英]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>
结果看起来像这样:
在这里采取的最佳方法是什么? 我希望菜单项绑定到动态列表并水平拉伸。 我还希望避免在网格中硬编码多个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>
,以防您使用MVVM更新这些元素
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.