2010-07-18 55 views
1

好吧,我正在使用網格來列出各種內容。我如何獲得特定的colums來調整大小,而其他人則保持不變。WPF - 調整網格中的列和行的大小

也就是說,形式會彈出specifc初始列大小的控制......如果用戶改變形式......我想一定「備忘錄」像場擴大。怎麼做?我似乎只能得到所有'第二'列高度擴大...不只是1(最後一個)...或特定的。

感謝您的任何幫助!

這裏是佈局...我怎樣才能使「長」文本調整大小與形態調整大小,並保持粘在表格底部的按鈕??? TX

<DockPanel VerticalAlignment="Top"> 
    <Grid DockPanel.Dock="Top" VerticalAlignment="Top" HorizontalAlignment="Stretch" Grid.Column="0" Margin="10,10,10,10" > 
     <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"></ColumnDefinition> 
     <ColumnDefinition MinWidth="150" ></ColumnDefinition>   
     </Grid.ColumnDefinitions> 

     <Grid.RowDefinitions> 
     <RowDefinition></RowDefinition> 
     <RowDefinition MinHeight="80" Height="Auto"></RowDefinition> 
     <RowDefinition ></RowDefinition> 
     </Grid.RowDefinitions> 

     <Label Grid.Column="0" Grid.Row="0" Content="Test1"/> 
     <Label Grid.Column="0" Grid.Row="1" Content="Test2 -Long notes"/> 
     <Label Grid.Column="0" Grid.Row="2" Content="Test3"/> 

     <TextBox Height="Auto" Grid.Column="1" Grid.Row="0" /> 
     <TextBox Height="Auto" Grid.Column="1" Grid.Row="1" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" /> 
     <TextBox Height="Auto" Grid.Column="1" Grid.Row="2" /> 

    </Grid> 
    <StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" HorizontalAlignment="Right" MinHeight="20" Margin=" 0,0,10,10"> 
     <Button Content="OK" Margin="0,0,10,0" Width="75" IsDefault="True"/> 
     <Button Content="Cancel" Width="75" IsCancel="True" /> 
    </StackPanel> 
    </DockPanel> 

(加1「答案」之後) 現在,如果我去掉底部的StackPanel(確定,取消按鈕)從等式使這個更容易,我設置了第一和第二行以一個固定值...我似乎能夠得到這個工作(不想要設置一個最大高度,雖然)...哦,我需要改變verticalAlignment'伸展'。但只要我添加的StackPanel再次按鈕......拉伸不再工作......所以這裏是下一個修訂版...

<DockPanel VerticalAlignment="Stretch"> 
    <Grid DockPanel.Dock="top" VerticalAlignment="Stretch" Grid.Column="0" Margin="10,10,10,10" > 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"></ColumnDefinition> 
      <ColumnDefinition MinWidth="150" Width="*"></ColumnDefinition> 
     </Grid.ColumnDefinitions> 

     <Grid.RowDefinitions> 
      <RowDefinition MaxHeight="30"></RowDefinition> 
      <RowDefinition MinHeight="80" Height="*"></RowDefinition> 
      <RowDefinition MaxHeight="30"></RowDefinition> 
     </Grid.RowDefinitions> 

     <Label Grid.Column="0" Grid.Row="0" Content="Test1"/> 
     <Label Grid.Column="0" Grid.Row="1" Content="Test2 -Long notes"/> 
     <Label Grid.Column="0" Grid.Row="2" Content="Test3"/> 

     <TextBox Grid.Column="1" Grid.Row="0" /> 
     <TextBox Grid.Column="1" Grid.Row="1" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" /> 
     <TextBox Grid.Column="1" Grid.Row="2" /> 
    </Grid> 

    <StackPanel DockPanel.Dock="Bottom" VerticalAlignment="Bottom" HorizontalAlignment="Right" Orientation="Horizontal" MinHeight="20" Margin=" 0,0,10,10"> 
     <Button Content="OK" Margin="0,0,10,0" Width="75" IsDefault="True"/> 
     <Button Content="Cancel" Width="75" IsCancel="True" /> 
    </StackPanel> 
</DockPanel> 

所以我仍然有問題...

回答

3

使用*爲列的寬度,而不是汽車,它告訴柱採取了其他各列設置後,無論剩餘空間。

如果您需要多列共享不同百分比的可用空間,你可以用一個號碼前綴的*,如「2 *」和「3 *」。默認情況下,「」表示1

HTH,
Berryl

+0

嗨,謝謝你的回答。 這裏的問題是如何在除某個行之外的所有行上指定NO大小調整高度。 *僅支持列定義和行定義,那麼如何獲得橫截面?第二排,第二排只能這樣做。 如示例所示,底部按鈕不會粘到底部,並且最後一行,最後一列不會調整大小。用'*'取代汽車並沒有幫助。 – appWoW 2010-07-19 04:08:21

+0

我修改了上面的示例代碼...但仍然有問題。 – appWoW 2010-07-19 04:51:56

+0

嗨appWow。我在這裏試圖做的事情有點迷茫。指定不調整大小(除了一個)意味着一行和只有一行具有Height =「*」。這與在網格中設置單個單元格的大小不同 - 最好的方法是將一個網格嵌套在另一個網格中,並使用該單元格(第二行,第二列)Width =「*」上的星形尺寸。 HTH – Berryl 2010-07-19 19:05:32

0

我似乎只能在自己的網格行和列incorporting的StackPanel中要解決的問題。這是我的解決方案。不知道在這種情況下是否需要使用底座面板...但沒有修補更多...這是我目前的解決方案。如果任何人可以向我解釋如何使用堆棧面板確定,取消按鈕在網格外部,我很想知道。同時,這個解決方案適用於那些正在研究這類問題的人。如您所見,您需要在所有其他行定義中使用Auto。 *你希望它擴大。

<DockPanel VerticalAlignment="Stretch"> 
     <Grid DockPanel.Dock="top" VerticalAlignment="Stretch" Grid.Column="0" Margin="10,10,10,10" > 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"></ColumnDefinition> 
       <ColumnDefinition MinWidth="150" Width="*"></ColumnDefinition> 
      </Grid.ColumnDefinitions> 

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

      <Label Grid.Column="0" Grid.Row="0" Content="Test1"/> 
      <Label Grid.Column="0" Grid.Row="1" Content="Test2 -Long notes"/> 
      <Label Grid.Column="0" Grid.Row="2" Content="Test3"/> 

      <TextBox Grid.Column="1" Grid.Row="0" /> 
      <TextBox Grid.Column="1" Grid.Row="1" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" /> 
      <TextBox Grid.Column="1" Grid.Row="2" /> 

      <StackPanel Grid.Column="1" Grid.Row="3" VerticalAlignment="Bottom" HorizontalAlignment="Right" Orientation="Horizontal" MinHeight="20" Margin=" 0,10,0,0"> 
       <Button Content="OK" Margin="0,0,10,0" Width="75" IsDefault="True"/> 
       <Button Content="Cancel" Width="75" IsCancel="True" /> 
      </StackPanel> 
     </Grid> 
    </DockPanel> 
+0

DockPanel,正在做你想做的(有點),因爲它默認情況下會使LastChildFill =「true」。你的StackPanel是最後一個孩子。這個想法是正確的,因爲你有一個面板(網格)嵌套在另一個面板(DockPanel)中。如果您想要像您想要的更精細的控制,那麼也可以將DockPAnel更改爲網格。 HTH – Berryl 2010-07-19 19:12:22

0

如果您希望能夠重新大小僅由行和列的定義作出的廣場之一,你應該添加一個網格或任何容器元素一個平方里面。然後,您將相應地在方格內重新調整大小。這樣所有的定義不會重新調整大小,而是網格,它的內部元素將重新調整大小,從而不會改變其他元素。這並不常見,但您可以擁有儘可能多的堆疊面板和網格,並在需要時設置其可見性。有時當某些東西不起作用時,將它們粘在別的東西里面並試驗一下。你可能會偶然得到它,但你仍然可以得到它。