WPF - 使用调整大小调整窗口内的控件

时间:2010-08-16 19:17:47

标签: c# wpf layout grid

所以我对WPF很新,而且我的Window布局有问题。目前我有一个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.现在,我希望在调整Window的大小时,Image和WFH都会扩展,以便它们保持相同的(相对于Window)大小。 (我实际上也希望同样的情况发生在我的图形控件上,但如果我能得到其他的话,我可能会想出那个。我不能为我的生活找出我需要打开/关闭的设置或者我可能需要绑定或其他什么才能实现这一点。非常感谢任何帮助!

谢谢!

2 个答案:

答案 0 :(得分:7)

你试过了吗?

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

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

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

答案 1 :(得分:3)

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

但是,您可能希望查看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" />