2010-06-01 7 views
8

Estoy migrando una aplicación WinForms a WPF. Todo ha ido bien hasta el momento, excepto en relación con mis intentos de usar GridSplitter, que nunca se puede hacer para cambiar el tamaño de nada en el tiempo de ejecución.¿Por qué mi GridSplitter no funciona en absoluto?

Para asegurarse de que no era solo mi código intenté compilar el GridSplitter sample de LearnWPF.com y tampoco parece funcionar. Espero ver el cursor de cambio de tamaño estándar cuando paso el mouse sobre el divisor, lo que no ocurre, y, por lo que puedo ver, tampoco hay otra representación visual del divisor en la ventana.

¿Qué me falta aquí?

<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

Publique su XILL de GridSplitter por favor. – JustABill

Respuesta

9

En su ejemplo, GridSplitter está siendo colocado en la primera columna. No recuerdo las reglas de alineación de WPF en la parte superior de mi cabeza, pero creo que probablemente estén ubicadas en el lado izquierdo de la primera columna. No es realmente lo que querías.

Es mucho más fácil hacer que un GridSplitter ocupe una fila o columna, que intentar compartir una fila o columna con otros controles.

<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

No sabía que VerticalAlignment = "Stretch" y HorizontalAlignment = "Center" en GridSplitter es tan inevitable – peter70

-1

Se está perdiendo un concepto importante de Z-Ordering. Los controles se colocan en el orden z en el orden en que los enumera. Básicamente, el divisor de la red está siendo cubierto por la última columna. Si coloca el divisor de cuadrícula sobre la última columna en el orden z, debería funcionar bien sin requerir una columna adicional:

<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> 
Cuestiones relacionadas