【问题标题】:WPF Resizing/Aligning Buttons when parent window resized父窗口调整大小时WPF调整大小/对齐按钮
【发布时间】:2012-01-28 11:34:10
【问题描述】:

我正在编写我的第一个 WPF 应用程序,当窗口最大化时,我在调整大小/对齐按钮时遇到了一些问题。

基本上,我的应用程序顶部有一排大按钮。目前它们在 Canvas 中,但我也尝试过 Grid 和 Stackpanel。每当我最大化(或者实际上只是扩展我的窗口)时,按钮基本上都停留在同一个地方。我想要的是相对于其父容器重新定位按钮,或者拉伸按钮宽度以适应更改。

任何人都可以就实现这一目标的最佳容器和方法提供建议吗?我查看了 Canvas.Top/Left、HorzontalAlignment、Margin 等,但似乎找不到正确的组合。

谢谢。

【问题讨论】:

  • 尝试移除控件上的锚点;将锚设置为无
  • WPF中没有锚属性。

标签: c# wpf controls


【解决方案1】:

进入 WPF 的方法是所有内容都应该在 MainGrid 中对齐。 如果您将按钮 1 放在例如 Grid.Row 3 和 Grid.Column 2 中,它将保留在那里。

如果您更改窗口大小,网格会调整大小,但控件仍保留在原位。 您还可以使网格行/列固定宽度、自动调整大小或百分比。

与您的控件相同。所以知道这一点,这只是一个玩弄它的问题。

这是一个例子。随便玩一下宽度:

<Grid x:Name="LayoutRoot" Background="White">
    <Grid.RowDefinitions>
        <RowDefinition Height="43*" />
        <RowDefinition Height="222*" />
        <RowDefinition Height="35*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="113*" />
        <ColumnDefinition Width="168*" />
        <ColumnDefinition Width="119*" />
    </Grid.ColumnDefinitions>
    <Button Content="TEST" Grid.Column="2" Grid.Row="1" 
     HorizontalAlignment="Stretch"  VerticalAlignment="Stretch" />
</Grid>

做一些自动的,做一些固定的,最后你会理解目标。

【讨论】:

  • @DarrenYoung,除了 De Ruige 在这里描述的(每个“按钮”在它自己的网格行/列单元格中),您还可以将 Horizo​​ntalAlignment 和 VerticalAlignment 的按钮属性设置为“Stretch ",因此当单元格伸展时,其中的按钮也会伸展。
  • @DRapp:感谢您指出这一点。忘记添加一些按钮属性,进行编辑!
【解决方案2】:

为了您的目的,我会使用一个停靠在顶部的面板的 DockPanel。或者,如果您希望按钮伸展,您可以使用 UniformGrid。

<DockPanel>
  <StackPanel DockPanel.Dock="Top">
    <Button Content="Button1"/>
    <Button Content="Button2"/>
    <Button Content="Button3"/>
  </StackPanel
  <Grid>
    <!-- Stuff in the main part of the window here -->
  </Grid>
</DockPanel>

【讨论】:

    【解决方案3】:

    您可以使用@De-ruige 提到的网格。

    除了帮助您理解网格的含义外,请在网格定义中使用属性“ShowGridLines”,如下所示:

    <Grid x:Name="LayoutRoot" Background="White" ShowGridLines="True">
    

    此外,如果您想在网格中的几个单元格中添加按钮等控件,可以使用这些控件:Grid.RowSpan / Grid.ColumnSpan

    Grid.RowSpan - MSDN

    【讨论】:

      【解决方案4】:

      HorizontalAlignment 更改为“右”,将VerticalAlignment 更改为“底部”。

      巴姆。问题解决。

      【讨论】:

      • @NickProzee 你能解释一下这是一种不好的做法吗?只是想知道。
      猜你喜欢
      • 2012-04-23
      • 2021-09-20
      • 2011-10-01
      • 2017-11-18
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      相关资源
      最近更新 更多