WPF:具有统一宽度项目的水平对齐集合
WPF: Horizontally aligned collection with items of uniform width
我从视图模型绑定了数量可变的项目,这些项目需要水平显示并且可以选择。
每个项目都由一个文本表示,这些文本的长度各不相同。当我使用带有水平方向的 StackPanel 作为其 ItemTemplate 的列表视图时,项目仅与内部文本一样宽。
有没有办法让它们的尺寸都一样,也就是说最宽的尺寸?理想情况下没有一些复杂的代码隐藏,使用项目模板等?
注意:我不能设置一些任意的最小宽度,因为我不知道文本最终可以有多长(不同的语言等)
您可以使用 ListBox
作为 ItemsPanel,它具有 UniformGrid
的选择支持。 UniformGrid 将为每个元素
分配相等的 space
<ListBox>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
例子
我从视图模型绑定了数量可变的项目,这些项目需要水平显示并且可以选择。 每个项目都由一个文本表示,这些文本的长度各不相同。当我使用带有水平方向的 StackPanel 作为其 ItemTemplate 的列表视图时,项目仅与内部文本一样宽。 有没有办法让它们的尺寸都一样,也就是说最宽的尺寸?理想情况下没有一些复杂的代码隐藏,使用项目模板等? 注意:我不能设置一些任意的最小宽度,因为我不知道文本最终可以有多长(不同的语言等)
您可以使用 ListBox
作为 ItemsPanel,它具有 UniformGrid
的选择支持。 UniformGrid 将为每个元素
<ListBox>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
例子