均匀拉伸 ListView 内的 TextBoxes
Stretch TextBoxes inside ListView uniformly
我有一个 ListView,其中项目模板是另一个 ListView,它有一个 TextBox 项目模板。这样做的最终结果是我能够将我的 "rows" 集合绑定到第一个 ListView 并且我得到了我的数据的二维网格。我实际上是在尝试实现一个基本的电子表格。
我的问题是我希望 TextBox 水平拉伸,这样它们的宽度都相同,并占据所有可用空间 space。
我删除了所有无关的样式、事件处理、上下文菜单等 - 这是代码原样:
<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 的宽度绑定到控件上的依赖属性来实现这个 "working",该控件已更新并尝试计算所有框的正确宽度,但它相当丑陋和缓慢。
有谁知道我如何单独 XAML 完成这项工作?
不要使用 StackPanel
,而是在 ItemsPanelTemplate
中使用 UniformGrid
,并将其 Columns
设置为每行中所需的字段数。
<ItemsPanelTemplate>
<UniformGrid Columns="5"/>
</ItemsPanelTemplate>
这将:
Provides a way to arrange content in a grid where all the cells in the grid have the same size.
我有一个 ListView,其中项目模板是另一个 ListView,它有一个 TextBox 项目模板。这样做的最终结果是我能够将我的 "rows" 集合绑定到第一个 ListView 并且我得到了我的数据的二维网格。我实际上是在尝试实现一个基本的电子表格。
我的问题是我希望 TextBox 水平拉伸,这样它们的宽度都相同,并占据所有可用空间 space。
我删除了所有无关的样式、事件处理、上下文菜单等 - 这是代码原样:
<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 的宽度绑定到控件上的依赖属性来实现这个 "working",该控件已更新并尝试计算所有框的正确宽度,但它相当丑陋和缓慢。
有谁知道我如何单独 XAML 完成这项工作?
不要使用 StackPanel
,而是在 ItemsPanelTemplate
中使用 UniformGrid
,并将其 Columns
设置为每行中所需的字段数。
<ItemsPanelTemplate>
<UniformGrid Columns="5"/>
</ItemsPanelTemplate>
这将:
Provides a way to arrange content in a grid where all the cells in the grid have the same size.