2010-10-03 56 views
1

我遇到了佈局問題,我不知道如何解決。這裏是我的xaml的樣子,Silverlight中的佈局

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 

    <Grid x:Name="abc" Grid.Row="0" Grid.Column="0"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="40" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 

      <Button Grid.Row="0" Grid.Column="0"></Button> 
      <TextBox Grid.Row="0" Grid.Column="1"></TextBox> 
     </Grid> 
    </Grid> 

    <Grid Grid.Row="0" Grid.Column="1"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="40" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 

      <Button Grid.Row="0" Grid.Column="0"></Button> 
      <TextBox Grid.Row="0" Grid.Column="1"></TextBox> 
     </Grid> 
    </Grid> 
</Grid> 

現在上面的xaml的佈局正是我想要的。但是,我有一個額外的要求。在運行時我需要使網格「abc」可摺疊。另一個網格需要填充整個寬度。如果我使用星號調整寬度,那麼如果「abc」被摺疊,它的行爲更像是隱藏而不是摺疊。崩潰似乎適用於自動大小的寬度,但它不會根據需要給予比例調整大小。有沒有辦法做到這一點。請注意,我只能訪問Grids,StackPanels和Canvas以佈局我的項目(無DockPanel)。請讓我知道任何想法以及任何代碼片段。謝謝。

回答

0

難以告訴你的意圖在佈局,但這裏是一個示例,讓你開始。
我在Click事件中將ColumnDefintion寬度從*更改爲Auto,並將「可見性」設置爲「abc」網格的Collasped。我使用第二個按鈕來更改這些值以用於測試目的,並且刪除了不需要的額外級別的網格。

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition x:Name="ColumnToCollapse" Width="*" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 

    <Grid x:Name="abc" Grid.Row="0" Grid.Column="0"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="40" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 

     <Button Grid.Row="0" Grid.Column="0"></Button> 
     <TextBox Grid.Row="0" Grid.Column="1"></TextBox> 
    </Grid> 

    <Grid Grid.Row="0" Grid.Column="1"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="40" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 

     <Button Grid.Row="0" Grid.Column="0" Click="Button_Click" /> 
     <TextBox Grid.Row="0" Grid.Column="1"></TextBox> 
    </Grid> 
</Grid> 

這裏是按鈕單擊事件:

private bool _toggle = true; 

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    if (_toggle) 
    { 
    ColumnToCollapse.Width = GridLength.Auto; 
    abc.Visibility = Visibility.Collapsed; 
    _toggle = false; 
    } 
    else 
    { 
    ColumnToCollapse.Width = new GridLength(1, GridUnitType.Star); 
    abc.Visibility = Visibility.Visible; 
    _toggle = true; 
    } 
} 
0

有同樣的問題,只有在中間的第三列有一個分流器變得更糟。

基本上我綁定列寬度(每個)的屬性,返回自動在一種模式和明星在另一種模式。確保爲屬性實現INotifyPropertyChange,並在更改控制佈局的標誌時調用兩個列屬性名稱的onchange助手。

+0

注:該解決方案是爲那些使用MVVM風格模式(即沒有代碼隱藏)。現在沒有意義提供代碼,因爲你顯然對代碼隱藏感到滿意。 – 2010-10-03 22:26:53