2010-08-16 343 views
4

所以我对WPF很新,而且我的窗口布局有问题。目前我有一个WPF应用程序与网格定义如下:WPF - 在调整窗口大小的控件调整大小

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

在最顶行,跨两列,我有一个菜单。在第二行中,第一列有一些标签,第二列有一个Image和一个WindowsFormsHost,最后是第三行,第二列有一个图形控件。默认情况下,我将图像和WFH的大小设置为570 x 413.现在,我想要在调整窗口大小时使图像和WFH展开,以便它们保持与窗口大小相同的相对位置。 (我其实也希望我的图形控制也发生同样的情况,但是如果我能得到其他图形控件,我可能会想到这一点。我不能在我的生活中找出需要打开/关闭的设置或我可能需要绑定或任何为了做到这一点任何帮助是极大的赞赏

感谢

+0

请出示整个电网。目前还不清楚Grid是如何定义的,以及如何布置图像和WFH(StackPanel,Grid等?) – 2010-08-16 19:45:52

+0

您在同一个网格单元中编写了图像和WindowsFormsHost。他们是互相顶点还是什么?正如jsmith所说,使用*代替Auto。 – 2010-08-16 19:47:20

+0

@Wallstreet程序员:是的,它们彼此重叠 - 一次只能看到一个,这取决于应用程序在做什么(它所处的“模式”)。 – JToland 2010-08-16 19:54:43

回答

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> 

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

我会建议做一个像上面这样简单的应用程序,并玩弄约束来弄清楚每个做什么。

+0

以这种方式实现它仍然不适合我。我的图像是在一个画布内;这会有所作为吗?我仍然没有在该画布上设置宽度或高度属性。我推测它应该以相同的方式扩展(并且同时扩大图像),但是......没有。我只是在任何一方获得更多的空白空间。 更新:谢谢!我终于开始工作了(大多数情况下,我的画布内的图像看起来仍然很好)。出于某种原因,我的网格定义为,这一切都搞砸了!再次感谢,特别是代码示例。 – JToland 2010-08-16 19:51:59

+1

使用画布时要小心 - 事情不会自动调整大小。此外,您正在使用很多固定尺寸。如果你想自动调整大小,你可能会想要避免使用固定大小,除非你特别需要使用Canvas,否则我会建议使用Grid或其他面板。看到我的答案,自动调整大小的东西 - 它会使开发和维护变得更加轻松。 – 2010-08-16 20:10:17

3

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

但是,您可能想要查看网格和图像的Horizo​​ntalAlignment和VerticalAlignment属性,以及图像的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" /> 

相关问题