2013-10-22 16 views
7

WPF penceremde (.NET 4.0) İki sütunlu Izgara var: sol taraftaki uzatılmış metin kutusu (veya herhangi bir şey) ve sağdaki Genişletici. Ayrıca Expander'da Expander genişletildiğinde hem sol hem de sağ sütunları yeniden boyutlandırmak için tasarlanmış GridSplitter var. Ama işe yaramıyor.WPF Genişletici ile GridSplitter

<Window x:Class="WpfApplication10.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid ShowGridLines="True" > 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
     <ColumnDefinition Width="Auto" Name="column"/> 
    </Grid.ColumnDefinitions> 

    <TextBox Grid.Column="0" HorizontalAlignment="Stretch" TextWrapping="Wrap" 
      Text="TextBox" VerticalAlignment="Stretch" Background="Aqua"/> 

    <Expander Grid.Column="1" Header="Expander" ExpandDirection="Left" 
       HorizontalAlignment="Right" Background="LightBlue" > 
     <Expander.Content> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="5"/> 
        <ColumnDefinition Width="Auto"/> 
       </Grid.ColumnDefinitions> 

       <TextBlock Text="Some text Some text Some Text" Grid.Column="1"/> 
       <GridSplitter Grid.Column="0" Width="5"  
           ResizeBehavior="PreviousAndCurrent" 
           ResizeDirection="Columns" 
           HorizontalAlignment="Stretch"/> 
      </Grid> 
     </Expander.Content> 
    </Expander> 
</Grid></Window> 

Uygun çözüm bulunur:

Bu benim XAML kodudur. XAML:

<Window x:Class="WpfApplication10.MainWindow" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="MainWindow" Height="350" Width="525"> 

<Window.Resources> 
    <BooleanToVisibilityConverter x:Key="BoolToVisConverter"/> 
</Window.Resources> 

<Grid ShowGridLines="True"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" Name="leftColumn"/> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="Auto" Name="rightColumn" /> 
    </Grid.ColumnDefinitions> 

    <TextBox Grid.Column="0" 
      HorizontalAlignment="Stretch" 
      TextWrapping="Wrap" 
      Text="TextBox" 
      VerticalAlignment="Stretch" 
      Background="Aqua" /> 

    <Expander Grid.Column="2" 
       Name="Expander" 
       Header="Expander" 
       ExpandDirection="Left" 
       Background="LightBlue" 
       Collapsed="Expander_Collapsed" 
       Expanded="Expander_Expanded" > 
     <TextBlock Text="Some text Some text Some Text" /> 
    </Expander> 
    <GridSplitter Grid.Column="1" 
        Width="5" 
        ResizeBehavior="PreviousAndNext" 
        ResizeDirection="Columns" 
        VerticalAlignment="Stretch" 
        Height="Auto" 
        Visibility="{Binding ElementName=Expander, Path=IsExpanded, 
           Converter={StaticResource BoolToVisConverter}}"/> 
</Grid></Window> 

kod arkadaki: Bu sorunu çözmek için yardımcı olur

private void Expander_Collapsed(object sender, RoutedEventArgs e) 
    { 
     leftColumn.Width = new GridLength(1, GridUnitType.Star); 
     rightColumn.Width = new GridLength(1, GridUnitType.Auto); 
    } 

    private void Expander_Expanded(object sender, RoutedEventArgs e) 
    { 
     rightColumn.Width = new GridLength(1, GridUnitType.Star); 
    } 
+0

tam olarak neye ihtiyacım var Çözümünüzü paylaştığınız için teşekkürler! – Mat

cevap

4

Sizin ızgara bölücü (genişleticisi) iç ızgara üzerinde değil, ana şebekeye çalışır. Bu deneyin:

<Window x:Class="WpfApplication10.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" 
     Height="350" 
     Width="525"> 
    <Grid ShowGridLines="True"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition Width="5" /> 
      <ColumnDefinition Width="Auto" 
           Name="column" /> 
     </Grid.ColumnDefinitions> 

     <TextBox Grid.Column="0" 
       HorizontalAlignment="Stretch" 
       TextWrapping="Wrap" 
       Text="TextBox" 
       VerticalAlignment="Stretch" 
       Background="Aqua" /> 

     <Expander Grid.Column="2" 
        Header="Expander" 
        ExpandDirection="Left" 
        Background="LightBlue"> 
      <TextBlock Text="Some text Some text Some Text" /> 
     </Expander> 
     <GridSplitter Grid.Column="1" 
         Width="5" 
         ResizeBehavior="PreviousAndNext" 
         ResizeDirection="Columns" 
         VerticalAlignment="Stretch" 
         Height="Auto" /> 
    </Grid> 
</Window> 

Şimdi kullanıcı/genleşme daraltır genişlediğinde son sütunda ne olacağını ele gerekiyordu.

+0

Kod arkasında veya özel dönüştürücüsüz bir cevap arıyordum: AFAIK Expander sol tarafta ise, sadece XAML kodunu kullanmak mümkündür. Ama cevabın yeterince iyi. Söz konusu kodumu göndereceğim. –

0

, bu deneyin.

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid ShowGridLines="True" > 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
     <ColumnDefinition Width="Auto" Name="column"/> 

    </Grid.ColumnDefinitions> 

    <TextBox Grid.Column="0" HorizontalAlignment="Stretch" TextWrapping="Wrap" 
     Text="TextBox" VerticalAlignment="Stretch"/> 

    <Expander Grid.Column="1" Header="Expander" ExpandDirection="Left" 
      HorizontalAlignment="Right"> 
     <Expander.Content> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="5"/> 
        <ColumnDefinition Width="Auto"/> 
       </Grid.ColumnDefinitions> 

       <TextBlock Text="Some text Some text Some Text" Grid.Column="0"/> 
       <GridSplitter Grid.Column="1" Width="5"  
          ResizeBehavior="PreviousAndCurrent" 
          ResizeDirection="Columns" 
          HorizontalAlignment="Stretch"/> 
      </Grid> 
     </Expander.Content> 
    </Expander> 
</Grid> 

+1

Çalışmıyor ... –