2010-06-01 23 views
8

Sto migrando un'app WinForms a WPF. Tutto è andato bene finora, tranne in relazione ai miei tentativi di utilizzare GridSplitter che non riesco mai a creare per ridimensionare nulla in fase di esecuzione.Perché il mio GridSplitter non funziona affatto?

Per assicurarsi che non fosse solo il mio codice, ho tentato di compilare il GridSplitter sample da LearnWPF.com e non sembra funzionare neanche. Mi aspetto di vedere il cursore di ridimensionamento standard quando passo il mouse sullo splitter che non accade, e per quanto posso vedere non c'è neanche un'altra rappresentazione visiva dello splitter nella finestra.

Cosa mi manca qui?

<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

Pubblica il tuo XAML di GridSplitter per favore. – JustABill

risposta

9

Nel tuo esempio, GridSplitter viene posta nella prima colonna. Non ricordo le mie regole di allineamento del WPF in cima alla mia testa, ma penso che sia probabilmente posizionato sul lato sinistro della prima colonna. Non proprio quello che volevi.

È molto più semplice fare in modo che GridSplitter occupi una riga o una colonna piuttosto che provare a condividere una riga o una colonna con altri controlli.

<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

Non sapevo che VerticalAlignment = "Stretch" e HorizontalAlignment = "Center" su GridSplitter è così inevitabile – peter70

-1

Ti manca il concetto importante di Z-Ordering. I controlli vengono inseriti nell'ordine z nell'ordine in cui li elenchi. Fondamentalmente, lo splitter della griglia viene coperto dall'ultima colonna. Se si posiziona il Grid Splitter sull'ultima colonna nell'ordine z, dovrebbe funzionare senza richiedere una colonna aggiuntiva:

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