我有一个ListView,其中项目模板是另一个ListView,它有一个TextBox的项目模板。最终的结果是我能够将我的“行”集合绑定到第一个ListView,并获得我的数据的2D网格。我基本上是在尝试实现一个基本的电子表格。
我的问题是我希望TextBoxes水平拉伸,以便它们具有相同的宽度并占用所有可用空间。
我删除了所有无关的样式,事件处理,上下文菜单等 - 这里是代码:
<ListView ItemsSource="{Binding Rows}">
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<ListView ItemsSource="{Binding Path=RowData}">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=Value, Mode=TwoWay}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我已经尝试在ListView的ItemContainerStyle上设置HorizontalContentAlignment =“Stretch”,而在TextBox本身上设置HorizontalAlignment =“Stretch”到目前为止没有运气。我确实通过将TextBoxes的宽度绑定到控件上的依赖项属性来实现“工作”,该控件已更新,尝试计算所有框的正确宽度,但它相当丑陋和缓慢。
有人知道如何在XAML中完成这项工作吗?
答案 0 :(得分:1)
请勿使用StackPanel
,而是在ItemsPanelTemplate
中使用UniformGrid
,并将Columns
设置为每行所需字段数。
<ItemsPanelTemplate>
<UniformGrid Columns="5"/>
</ItemsPanelTemplate>
将会:
提供一种在网格中排列内容的方法,其中网格中的所有单元格具有相同的大小。