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

How to arrange controls horizontally with even spacing in WPF

我正在寻找一种灵活的方式来在网格内以均匀的间距排列矩形控件。控件是 added/removed 动态的。最后我希望让用户 select 以下布局之一:

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

使用 UniformGrid 并绑定列数和行数。将其用作项目控件的面板,您可以获得 MVVM 分离。

<ItemsControl ItemsSource={Binding X}>
    <ItemsControl.ItemsPanel>
       <ItemsPanelTemplate>
          <UniformGrid Rows={Binding...} />
     </ItemsPanelTemplate>    
   </ItemsControl.ItemsPanel>
</ItemsControl>

A 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 设置为 UniformGridWrapPanelGrid,具体取决于您的要求。 提供了一个很好的例子。