2009-12-12 19 views
15

Ich habe eine App mit Raster mit 3 Spalten. Der Gittersplitter zwischen der ersten und der zweiten Spalte funktioniert einwandfrei. Um den Splitter zwischen der zweiten und dritten Spalte zu bekommen, habe ich eine Spalte für den Splitter gemacht. (Also jetzt ist die dritte Spalte wirklich die vierte.)WPF - GridSplitter mit drei Spalten

Wenn ich die Größe der anderen Spalten verkleinern auch schrumpfen. Ich nehme an, das liegt daran, dass ich sie auf relative Größe eingestellt habe. Aber ich weiß nicht, wie ich das beheben soll.

Hier ist ein XAML Pad Ready Beispiel meines Problems. Stecken Sie dieses in das XAML-Pad und versuchen Sie dann, die letzte Spalte zu verkleinern.

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="1*" /> 
      <ColumnDefinition Width="1*" /> 
      <ColumnDefinition Width="Auto" /> 
      <ColumnDefinition Width="1*" /> 
     </Grid.ColumnDefinitions> 
     <StackPanel Background="#feca00" Grid.Column="0"> 
      <TextBlock FontSize="35" Foreground="#58290A" 
        TextWrapping="Wrap">Left Hand Side</TextBlock> 
     </StackPanel> 
     <GridSplitter Width="10" /> 
     <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="2" HorizontalAlignment="Right" VerticalAlignment="Stretch" Width="5"></GridSplitter> 
     <TabControl Grid.Column="3" Name="tabControl1"> 
      <TabItem Header="Add Links" Name="tabAddLinks"> 
       <Grid></Grid> 
      </TabItem> 
     </TabControl> 
    </Grid> 
</Page> 

Danke für die Hilfe!


EDIT: Es wurde vorgeschlagen, dass möglicherweise beheben es in ihren eigenen Spalten beide Teiler haben. Ich habe das ausprobiert und nun verkleinert der erste Splitter auch die Spalten wie der zweite Splitter. Hier

ist der XAML-Pad Code für dieses Beispiel:

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="1*" /> 
      <ColumnDefinition Width="Auto" /> 
      <ColumnDefinition Width="1*" /> 
      <ColumnDefinition Width="Auto" /> 
      <ColumnDefinition Width="1*" /> 
     </Grid.ColumnDefinitions> 
     <StackPanel Background="#feca00" Grid.Column="0"> 
      <TextBlock FontSize="35" Foreground="#58290A" 
        TextWrapping="Wrap">Left Hand Side</TextBlock> 
     </StackPanel> 
     <GridSplitter Grid.Column="1" HorizontalAlignment="Right" VerticalAlignment="Stretch" Width="5"></GridSplitter> 
     <Border CornerRadius="10" BorderBrush="#58290A" 
       BorderThickness="5" Grid.Column="2"> 
      <TextBlock FontSize="25" Margin="20" Foreground="#FECA00" 
        TextWrapping="Wrap">Right Hand Side</TextBlock> 
     </Border> 
     <GridSplitter Grid.Column="3" HorizontalAlignment="Right" VerticalAlignment="Stretch" Width="5"></GridSplitter> 
     <TabControl Grid.Column="4" Name="tabControl1"> 
      <TabItem Header="Add Links" Name="tabAddLinks"> 
       <Grid></Grid> 
      </TabItem> 
     </TabControl> 
    </Grid> 
</Page> 

Antwort

44

Versuchen HorizontalAlignment="Center" für beide Splitter Einstellung - keine Ahnung, warum es auf „Recht“ hat, soll das Verhalten verursachen, so verrückt zu gehen, aber es funktionierte für mich ändern :)

+0

Segne dich! Ich habe mir die Haare ausgezogen !!!!! – Vaccano

+2

update: Ich denke, es ist mit der ResizeBehaviour-Eigenschaft des GridSplitter zu tun, wird standardmäßig zu BasedOnAlignment, wenn nicht angegeben, so nur die Spalte auf der rechten Seite des GridSplitter Spalte wird in der Größe geändert werden ... würde tiefer in die msdn doco gehen, um sicher zu sein. .. – kiwipom

+0

Ja, segne dich wirklich! –

8

Ein Gridsplitter sollte innerhalb seiner eigenen Spalte in einem Raster angeordnet werden. Ich bin mir nicht sicher, ob ich Ihr Problem vollständig verstehe, aber ich schlage vor, dass Sie versuchen, ein Grid mit 5 ColumnDefinitions zu erstellen. Verwenden Sie die Spalten 1 und 2, um die GridSplitters und die Spalten 0, 2 und 4 für den Inhalt zu platzieren.

Die GridSplitter MSDN doc hat eine Probe, wie dies zu tun ist.

<Grid.ColumnDefinitions> 
    <ColumnDefinition/> 
    <ColumnDefinition Width="Auto" /> 
    <ColumnDefinition/> 
</Grid.ColumnDefinitions> 
... 
<GridSplitter Grid.Column="1" 
      HorizontalAlignment="Center" 
      VerticalAlignment="Stretch" 
      Background="Black" 
      ShowsPreview="True" 
      Width="5" 
      /> 
+0

habe ich versucht, dass und Jetzt sind beide Spalten gebrochen. Siehe meine aktualisierte Frage für das geänderte XAML. – Vaccano

+0

Beachten Sie auch, dass dieses Problem nur in einer 3-Spalten-Situation auftritt. Zwei Spalten funktionieren gut ... – Vaccano

+0

Ich denke, Sie haben nicht versucht, HorizontalAlignment = "Center" wie die Probe, die ich gepostet habe. :) Froh, dass du das Problem gelöst hast. –

Verwandte Themen