我正在寻找一种灵活的方法来在网格中排列具有均匀间距的矩形控件。动态添加/删除控件。最后我想让用户选择下面的一个布局:
我正在考虑使用UniformGrid,其余部分由网格属性处理:
<UniformGrid>
<Button Content="Button 1"/>
<Button Content="Button 2"/>
<Button Content="Button 3"/>
<Button Content="Button 4"/>
<Button Content="Button 5"/>
</UniformGrid>
但是,我担心的是我将来能够自定义布局,如选项3所示(见上图)。考虑到我在设计中遵循MVVM,我正在寻找如何使其尽可能灵活的建议。
答案 0 :(得分:3)
使用UniformGrid并绑定Columns和Rows的计数。将它用作项目控件的面板,您可以获得MVVM分离。
<ItemsControl ItemsSource={Binding X}>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows={Binding...} />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
答案 1 :(得分:1)
WrapPanel
可用于显示任意数量的项目,如果项目超出允许的宽度,则会自动换行到另一行。
<WrapPanel>
<Button Content="Button 1"/>
<Button Content="Button 2"/>
<Button Content="Button 3"/>
<Button Content="Button 4"/>
<Button Content="Button 5"/>
</WrapPanel>
或者,如果您正在寻找可以为控件定义动态布局的更具结构性的内容,我建议ItemsControl
将ItemsPanelTemplate
设置为{UniformGrid
1}},WrapPanel
或Grid
取决于您的要求。 James Lucas' answer为此提供了一个很好的例子。