我正在尝试使此侧栏中的网格填充为堆栈面板的侧栏。根据{{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>
结果如下:
在这里采取的最佳方法是什么?我希望菜单项绑定到动态列表并水平拉伸。我还希望避免在网格中硬编码多个RowDefinition,而不要使用StackPanel。有可能吗?
非常感谢
答案 0 :(得分:1)
您需要将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更新这些元素