2010-08-16 245 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" /> 

相關問題