如何在WPF中以均匀间距水平排列控件

时间:2015-04-23 14:50:23

标签: wpf mvvm controls docking

我正在寻找一种灵活的方法来在网格中排列具有均匀间距的矩形控件。动态添加/删除控件。最后我想让用户选择下面的一个布局:

enter image description here

我正在考虑使用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,我正在寻找如何使其尽可能灵活的建议。

2 个答案:

答案 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>

或者,如果您正在寻找可以为控件定义动态布局的更具结构性的内容,我建议ItemsControlItemsPanelTemplate设置为{UniformGrid 1}},WrapPanelGrid取决于您的要求。 James Lucas' answer为此提供了一个很好的例子。