2016-05-04 17 views
6

bir düğme tıklandığında bir GridSplitter ile Grid bir sütunu gizlemek çalışıyorum taşındığında Sütunlar düzgün gizlemek yok (düğme çöktü üçüncü sütundaki tüm öğelerin görünürlüğünü ayarlar) . GridSplitter'u taşımazsam düzgün çalışır ve üçüncü sütun kaybolur, ancak GridSplitter'u kaydırırsam içerik kaybolur, ancak diğerleri sütun boş alanı doldurmak için yeniden boyutlandırılmaz.WPF - GridSplitter

Nasıl bu sorunu çözebilir: Burada

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition/> 
     <RowDefinition Height="25"/> 
    </Grid.RowDefinitions> 

    <Grid.ColumnDefinitions> 
     <ColumnDefinition x:Name="a" Width="*"/> 
     <ColumnDefinition x:Name="b" Width="3"/> 
     <ColumnDefinition x:Name="c" Width="Auto" MaxWidth="600"/> 
    </Grid.ColumnDefinitions> 
    <Border Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" Background="Green"> 
     <Image Source="te/Dante.png" Height="Auto" Margin="0,128,2,71"/> 
    </Border> 
    <Button Grid.Column="0" Grid.Row="0" Width="30" Height="30" Margin="0,10,10,0" HorizontalAlignment="Right" VerticalAlignment="Top" Click="Button_Click"></Button> 
    <GridSplitter Width="5" Grid.Column="1" Grid.Row="0" Grid.RowSpan="2" ResizeDirection="Columns" HorizontalAlignment="Left" Background="White" BorderBrush="Black" BorderThickness="1,0" ResizeBehavior="PreviousAndCurrent"/> 
    <WrapPanel x:Name="wpC" Grid.Column="2" Grid.Row="0" Grid.RowSpan="2" MinWidth="300" HorizontalAlignment="Stretch" Background="Aqua" Panel.ZIndex="-1"></WrapPanel> 
</Grid> 

benim sorunum (gif) bir örnektir? Muhtemelen MVVM desenine saygı duyuyoruz.

+0

göster tam olarak nasıl * gizlemek * bir şey? 'X: Name' kullanmak zaten saf MVVM değil (kodun arkasında kod tanım genişliğini ayarladığınızı farz ediyorum). Btw, [ScreenToGif] 'i (https://screentogif.codeplex.com/) kullanabilir ve sorunu göstermek için birkaç kare yakalayabilir, [soruma bakın] (http://stackoverflow.com/q/36915180/1997232). – Sinatr

+0

Gif'i ekledim, şimdiye kadar arkada kod kullanarak bir çözüm yaptım. – Jacopo

cevap

4

sorun basittir, sen GridSplitter ResizeBehavior="PreviousAndCurrent" set, ama önceki ızgara sütun genişliği * ve 3d sütun genişliği değiştirildiğinde en kısa sürede ayırıcı hareket ederken genişliği birimleri (yani yeniden boyutlandırmak mümkün olmayacaktır mutlak olarak değiştirilecek).

Sorunu özmek için GridSplitter ResizeBehavior="PreviousAndNext" ayarını yapmanız yeterlidir. Bunu yaparsanız, splitter, 3B sütunun genişliğini değiştirir, ancak artık ilkine dokunmamalıdır.

Btw, düğmesini kullanarak ve olayı tıklayın yerine sen (IsChecked gizlemek istediğiniz içeriğe sahip kabın Visibility bağlı olan) ToggleButton kullanabilir, this answer bakın. Saf xaml görünümünde dönüştürücüler kullanmak, arkasındaki bir kod ve x:Name'dan daha iyi MVVM'dir.


Doğru, birkaç düzen sorunları var, burada tam bir çözümdür: kod arkasında için

<Window.Resources> 
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> 
</Window.Resources> 
<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
     <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 
    <Border Background="Green" /> 
    <ToggleButton x:Name="toggleButton" 
        Width="30" 
        Height="30" 
        Margin="0,10,10,0" 
        HorizontalAlignment="Right" 
        VerticalAlignment="Top" /> 
    <Grid Grid.Column="1" 
      Visibility="{Binding IsChecked, ElementName=toggleButton, Converter={StaticResource BooleanToVisibilityConverter}}"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition Width="300" 
           MinWidth="300" 
           MaxWidth="600" /> 
     </Grid.ColumnDefinitions> 
     <GridSplitter Width="5" 
         ResizeBehavior="CurrentAndNext" /> 
     <WrapPanel Grid.Column="1" 
        Background="Aqua" /> 
    </Grid> 
</Grid> 

gerek yok, here gelen dönüştürücü olsun.

Noktası: 1)) auto sütunlu * ve fixed width (ayırıcı doesn't work well için sakla mümkün kap 2) ayar ızgarası sütunlar içinde ayırıcı koydu.

Demo:

+0

'un arkasındaki kodu kullanmadan bu sorunu çözmenin bir yolu olup olmadığını öğrenmek istiyorum. ResizeBehavior'ı PreviousAndNext'e ayarlıyorum ama sorunu çözmüyor. Görünüşe göre, 3. sütunun genişliği Auto'dan bir değere değişir ve Görünürlük, Daraltılmış olarak ayarlanmış olsa bile bu değer korunur. Diğer ResizeBehavior denedim, ancak hiçbir şey çalışmıyor. – Jacopo

+0

Doğru, düzenlemeye bakın. – Sinatr

+0

çalışıyor, teşekkürler! – Jacopo