2014-02-24 29 views
0

有DockPanel中與以水平的方式並排放置三個子控件調整大小的控制: 1)樹視圖 2)的RichTextBox 3)網格如何在運行時在WPF

的RichTextBox在於樹視圖的中間和格。我將RichTextBox作爲DockPanel的最後一個孩子,並將LastChildFill屬性設置爲True。現在,因爲可以在運行時關閉Grid,所以我希望RichTextBox佔用Grid關閉後變空的所有空間。但是,如果再次顯示網格,則RichTextBox應該從右側收縮以允許網格適合。如何實現此目的?我是WPF的新手。另外,如何隱藏網格?這是XAML。

<DockPanel Grid.Row="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" LastChildFill="True"> 
     <Border BorderThickness="1" DockPanel.Dock="Left" Height="Auto" HorizontalAlignment="Stretch" Margin="1" VerticalAlignment="Stretch" Width="Auto" CornerRadius="0" BorderBrush="#FF646464"> 
      <TreeView Name="TV" Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> 
     </Border> 
     <Border Name="Notification_Pane" BorderThickness="1" DockPanel.Dock="Right" Height="Auto" HorizontalAlignment="Stretch" Margin="1" VerticalAlignment="Stretch" Width="Auto" CornerRadius="0" BorderBrush="#FF646464"> 
      <Grid> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="Auto" /> 
        <RowDefinition Height="*" /> 
       </Grid.RowDefinitions> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*" /> 
        <ColumnDefinition Width="Auto" /> 
       </Grid.ColumnDefinitions> 
       <Label Content="Notification" Margin="0" HorizontalAlignment="Stretch" VerticalAlignment="Top" Background="LemonChiffon" Grid.Row="0" Grid.Column="0"/> 
       <Button Name="btn_Close" Content="X" Margin="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="LemonChiffon" Height="Auto" Width="Auto" Grid.Row="0" Grid.Column="1" Padding="10,0,10,0" BorderThickness="0" Cursor="Hand" Focusable="True" IsHitTestVisible="True" ClickMode="Release" Click="Button_Click" /> 
       <ScrollViewer Height="Auto" Name="ScrollViewer" Width="Auto" Margin="0" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2"> 
        <StackPanel CanVerticallyScroll="True" Height="Auto" Name="Notification_Panel" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 

        </StackPanel> 
       </ScrollViewer> 
      </Grid> 
     </Border> 
     <Border BorderThickness="1" Height="Auto" HorizontalAlignment="Stretch" Margin="1" VerticalAlignment="Stretch" Width="Auto" CornerRadius="0" BorderBrush="#FF646464"> 
      <RichTextBox Name="rtb" Height="Auto" Width="Auto" Grid.Row="2" HorizontalAlignment="Stretch" Grid.Column="1" Margin="0" /> 
     </Border> 
    </DockPanel> 

回答

2

您可以使用Grid.Visibility屬性來顯示和隱藏網格。 下面的代碼應該做的工作:

private void Button_Click(object sender, RoutedEventArgs e) //X Button click event. 
    { 
     //grid is the name of our Grid Control we want to hide. 
     grid.Visibility = System.Windows.Visibility.Collapsed; 
    } 

顯示網格再次,你應該使用下面的代碼:

grid.Visibility = System.Windows.Visibility.Visible; 

RichTextBox控件將總是適合在DockPanel中控制。

+0

謝謝。這真的很有幫助。 'System.Windows.Visibility.Collapsed'是我錯過的東西。你能解釋一下這個Visibilty.Collapsed如何工作。我的理解是,Visibility.Hidden隱藏了用戶的控制權,即對用戶不可見,但實際上它在那裏。這是真的? – Prasoon

+0

@Prasoon是的,這是真的。 '** System.Windows.Visibility.Visible **:顯示元素.' ** ** System.Windows.Visibility.Collapsed **:不顯示元素,也不在佈局中保留空間.' '** System.Windows.Visibility.Hidden **:不顯示元素,但爲佈局中的元素保留空間。' 您可以在這裏找到更多[Here](http://msdn.microsoft.com/ en-us/library/system.windows.visibility(v = vs.110).aspx)和[Here](http://msdn.microsoft.com/en-us/library/system.windows.uielement.visibility( v = vs.110).aspx) – GeorgeChond

+0

@Prasoon如果能幫助你,你可以將我的答案設置爲答案嗎? – GeorgeChond