【问题标题】:WPF UniformGrid rows and column same width heightWPF UniformGrid 行和列相同的宽度高度
【发布时间】:2020-06-03 23:42:16
【问题描述】:

我需要有关 UniformGrid 或 Grid、表格等方面的帮助。

简单版: 我有一个只有 6 个矩形的 MainWindow,它们应该填满我的整个 MainWindow。当我调整窗口大小时,这 6 个矩形需要能够像所有其他矩形一样调整大小并保持相同的宽度和高度。

我最终需要用实际内容替换我的矩形,例如 6 个视频播放、6 个网络浏览器或 6 个图像等,所有这些都具有相同的宽度/高度,因为用户调整了窗口大小。

这是矩形。

到目前为止,这是我的 XAML 代码。它不太工作,因为即使我调整主窗口的大小,矩形都保持为“正方形”,它们总是有长度 = 宽度。但我需要矩形,有时长度可能大于宽度,因为他的窗口是由用户调整大小的。

        <UniformGrid Rows="2" Columns="3">
            <Rectangle Stretch="UniformToFill" Fill="Black" />
            <Rectangle Stretch="UniformToFill" Fill="Blue" />
            <Rectangle Stretch="UniformToFill" Fill="Red" />
            <Rectangle Stretch="UniformToFill" Fill="Green" />
            <Rectangle Stretch="UniformToFill" Fill="Yellow" />
            <Rectangle Stretch="UniformToFill" Fill="Orange" />
        </UniformGrid>

复杂版: 我最终需要允许用户显示 1、2、4 或 6 个显示器,因此他们需要占据整个窗口的宽度/高度。

如果它应该显示 2 个显示器,它的外观如下。 (当用户调整窗口大小以使长度>宽度时)

【问题讨论】:

    标签: c# wpf xaml grid uniformgrid


    【解决方案1】:

    如果您使用星号(默认设置)定义列和行,则网格已经为您提供了调整大小的行为。而不是写例如&lt;RowDefinition Height="*"/&gt;,你可以写&lt;RowDefinition/&gt;

    所以,这应该可行:

    <Grid>
      <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
      </Grid.RowDefinitions>
      <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
        <ColumnDefinition/>
      </Grid.ColumnDefinitions>
      <Rectangle Grid.Row="0" Fill="Black" />
      <Rectangle Grid.Column="1" Fill="Blue" />
      <Rectangle Grid.Column="2" Fill="Red" />
      <Rectangle Grid.Row="1" Fill="Green" />
      <Rectangle Grid.Row="1" Grid.Column="1" Fill="Yellow" />
      <Rectangle Grid.Row="1" Grid.Column="2" Fill="Orange" />
    </Grid>
    

    对于复杂的情况,如果要创建列或行,您需要根据放入 Grid 的元素和窗口大小调整网格的 RowDefinitionsColumnDefinitions。您可以在网格上设置 Codebehind 中的所有内容。

    在 Xaml 中为其命名并在 Codebehind 中使用,例如 grid.RowDefinitions.Add(...);

    通过grid.Children.Add(...);在 Codebehind 中添加或删除元素

    通过静态方法Grid.SetRowGrid.SetColumn在Codebehind中设置Grid.RowGrid.Column

    【讨论】:

    • 谢谢,这行得通,但你知道为什么如果我将整个东西包裹在 中,它就不起作用了吗?我想这确实是我的问题,是我到处都嵌套了停靠面板和堆栈面板,不知何故,一旦进入堆栈面板,这段代码就根本不起作用。
    • 是的,当你有一个垂直的 StackPanel 时,什么都不能垂直拉伸,因为 StackPanel 垂直堆叠东西 :-) 元素只会在垂直的 StackPanel 中水平拉伸。另一种方式是水平 StackPanel:元素可以垂直拉伸,但水平它们不会拉伸,因为它们是堆叠的。而已。如果您希望您的元素增长和缩小,请使用 并定义列和行。那些带有 * 大小的列会增长和缩小。
    • DockPanel 有一个 LastChildFillll 属性,您可以将其设置为 true,那么当您调整整个 DockPanel 的大小时,最后一个子项将增长和缩小,但只有最后一个子项。网格是您想要使用的真实事物。使用嵌套网格,就可以了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多