【问题标题】:WPF - Resizing controls within a window with resizeWPF - 使用调整大小调整窗口中的控件大小
【发布时间】:2011-03-30 14:49:13
【问题描述】:

所以我对 WPF 很陌生,我的窗口布局有问题。目前我有一个 WPF 应用程序,其 Grid 定义如下:

    <Grid.RowDefinitions>
        <RowDefinition Height="23" />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>

在最上面一行,跨越两列,我有一个菜单。在第二行中,我在第一列中有一些标签,在第二列中有一个 Image 和一个 WindowsFormsHost,最后,在第三行中,我在第二列中有一个图形控件。默认情况下,我将 Image 和 WFH 的大小设置为 570 x 413。现在,我希望 Image 和 WFH 在调整窗口大小时都展开,以使它们保持相同的相对(相对于窗口)大小。 (我实际上也希望我的图形控件也发生同样的情况,但如果我能得到其他的,我可能会想出那个。我一辈子都无法弄清楚我需要打开/关闭什么设置或为了实现这一点,我可能需要绑定什么或其他任何东西。非常感谢任何帮助!

谢谢!

【问题讨论】:

  • 请显示整个网格。目前还不清楚 Grid 是如何定义的,以及图像和 WFH 是如何布局的(StackPanel、Grid 等?)
  • 您写道,您在同一个网格单元中有一个图像和一个 WindowsFormsHost。他们是在彼此之上还是什么?正如 jsmith 所说,使用 * 而不是 Auto。
  • @Wallstreet Programmer:是的,它们是相互重叠的——根据应用程序正在做什么(它所处的“模式”),一次只能看到一个。

标签: c# wpf layout grid


【解决方案1】:

你试过了吗:

<RowDefinition Height="*" />

确保在图像或控件中分配 Grid.Row,但不要对控件的高度/宽度属性进行签名。控件应随扩展自动调整大小。

更新

进行了快速测试以确保它有效。

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="23"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>

        <Label Grid.Row="0" Content="Example"/>
        <Image Grid.Row="1" Source="c:\Example.jpg"/>
        <Label Grid.Row="2" Content="Example2"/>
    </Grid>

图像会根据图像的比例随应用程序展开。它确实会扩展,但会保持其尺寸以及完整的图像。如果您将行定义从 ***** 更改为 Auto,您会注意到图像会扩大,但会扩大到您的视野之外。这意味着您不会总是看到完整的图像。

我建议像上面那样制作一个简单的应用程序,并使用约束来弄清楚每个应用程序的作用。

【讨论】:

  • 以这种方式实现它仍然不适合我。我的图像在画布内;那会有什么不同吗?我仍然没有在该画布上设置宽度或高度属性。我认为它应该以相同的方式扩展(同时,同样扩展了图像),但是......什么都没有。我只是在两边都有更多的空白。更新:谢谢!我终于让它工作了(大多数情况下,我在画布中的图像似乎仍然关闭)。出于某种原因,我的 Grid 定义是 搞砸了!再次感谢,特别是代码示例。
  • 小心使用画布 - 事情不会自动调整大小。此外,您使用了很多固定尺寸。如果您希望自动调整大小,您可能希望避免使用固定大小,除非您特别需要使用 Canvas,否则我建议使用 Grid 或其他面板。请参阅我的答案以了解自动调整大小的内容 - 这将使您的开发和维护变得更加容易......
【解决方案2】:

您需要在描述中显示更多信息,因为 Grid 和 Image 等的所有属性都会影响布局。

但是,您可能希望查看 Grid 和 Image 的 Horizo​​ntalAlignment 和 VerticalAlignment 属性,以及 Image 的 Stretch 属性。此外,您不想为图像指定固定大小(如果您希望它们在启动时具有特定大小,可以指定 MinWidth 和 MinHeight)。

这里有一个简单的例子,它显示了一个用缩放图像填充窗口的网格。

<Grid HorizontalAlignment="Stretch"
      VerticalAlignment="Stretch">
        <Grid.RowDefinitions>
            <RowDefinition Height="23" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

    <Label Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="2" Content="First Row" />
    <Label Grid.Column="0" Grid.Row="1" Content="Column 0, Row 1" />

    <Image Grid.Column="1" Grid.Row="1" 
           HorizontalAlignment="Stretch"
           VerticalAlignment="Stretch"
           Source="Resources\ExamplePicture.png"
           Stretch="Uniform" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 2015-01-19
    • 2012-05-17
    • 2021-09-20
    • 2013-06-24
    • 1970-01-01
    相关资源
    最近更新 更多