2010-06-01 7 views
8

Je migre une application WinForms vers WPF. Tout s'est bien passé jusqu'à présent, sauf en ce qui concerne mes tentatives d'utiliser GridSplitter que je ne peux jamais effectuer pour redimensionner quoi que ce soit à l'exécution.Pourquoi mon GridSplitter ne fonctionne-t-il pas?

Pour m'assurer que ce n'était pas seulement mon code, j'ai essayé de compiler le GridSplitter sample de LearnWPF.com et il ne semble pas fonctionner non plus. Je m'attends à voir le curseur de redimensionnement standard quand je souris sur le séparateur qui ne se produit pas, et autant que je peux voir, il n'y a pas d'autre représentation visuelle du séparateur dans la fenêtre non plus.

Qu'est-ce qui me manque ici?

<Window x:Class="UI.Test" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Test" Height="300" Width="300"> 
<Grid> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 
     <StackPanel Background="#feca00" Grid.Column="0"> 
      <TextBlock FontSize="35" Foreground="#58290A" 
       TextWrapping="Wrap">Left Hand Side</TextBlock> 
     </StackPanel> 
     <GridSplitter/> 
     <Border CornerRadius="10" BorderBrush="#58290A" 
      BorderThickness="5" Grid.Column="1"> 
      <TextBlock FontSize="25" Margin="20" Foreground="#FECA00" 
       TextWrapping="Wrap">Right Hand Side</TextBlock> 
     </Border> 
    </Grid> 

+2

Poster XAML de votre GridSplitter s'il vous plaît. – JustABill

Répondre

9

Dans votre exemple, GridSplitter est placé dans la première colonne. Je ne me souviens pas de mes règles d'alignement WPF du haut de ma tête, mais je pense qu'il est probablement placé sur le côté gauche de la première colonne. Pas vraiment ce que tu voulais.

Il est beaucoup plus facile de placer un GridSplitter sur une ligne ou une colonne que de tenter de partager une ligne ou une colonne avec d'autres commandes.

<Window x:Class="UI.Test" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Test" Height="300" Width="300"> 
<Grid> 
     <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="Auto"/> 
     </Grid.ColumnDefinitions> 
     <StackPanel Grid.Column="0" Background="#feca00"> 
      <TextBlock FontSize="35" Foreground="#58290A" TextWrapping="Wrap"> 
       Left Hand Side 
      </TextBlock> 
     </StackPanel> 
     <GridSplitter 
      Width="4" 
      Grid.Column="1" 
      Background="Red" 
      VerticalAlignment="Stretch" 
      HorizontalAlignment="Center"/> 
     <Border 
      Grid.Column="2" 
      BorderBrush="#58290A" 
      BorderThickness="5" 
      CornerRadius="10"> 
      <TextBlock FontSize="25" Foreground="#FECA00" TextWrapping="Wrap"> 
       Right Hand Side 
      </TextBlock> 
     </Border> 
     </Grid> 
    </Grid> 
</Window> 
+0

Je ne savais pas que VerticalAlignment = "Stretch" et HorizontalAlignment = "Center" sur GridSplitter est si inévitable – peter70

-1

Vous manquez un concept important de Z-Ordering. Les contrôles sont placés dans l'ordre z dans l'ordre dans lequel vous les avez listés. Fondamentalement, votre séparateur de réseau est couvert par la dernière colonne. Si vous placez le séparateur de grille sur la dernière colonne dans l'ordre z, il devrait fonctionner parfaitement sans nécessiter une colonne supplémentaire:

<Window x:Class="UI.Test" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Test" Height="300" Width="300"> 
    <Grid> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
      </Grid.ColumnDefinitions> 
      <StackPanel Background="#feca00" Grid.Column="0"> 
       <TextBlock FontSize="35" Foreground="#58290A" TextWrapping="Wrap">Left Hand Side</TextBlock> 
      </StackPanel> 
      <Border CornerRadius="10" BorderBrush="#58290A" BorderThickness="5" Grid.Column="1"> 
       <TextBlock FontSize="25" Margin="20" Foreground="#FECA00" TextWrapping="Wrap">Right Hand Side</TextBlock> 
      </Border> 
      <GridSplitter Grid.Column="1"/> 
     </Grid> 
    </Grid>