2009-12-12 22 views
15

3列のグリッドを持つアプリがあります。第1列と第2列の間のグリッドスプリッタは正常に動作します。スプリッターを2番目と3番目の列の間にするために、私はスプリッターの列を作った。 (今、3番目の列は実際に4番目です。)WPF - 3列のGridSplitter

他の列のサイズを変更すると、縮小されます。私は彼らが相対的な大きさに設定されているのでそれがあると思います。しかし、私はそれを修正する方法を知らない。

ここに、私の問題のXAML Pad Readyの例があります。これをXAMLパッドに差し込み、最後の列のサイズを小さくしてください。

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

ありがとうございます!


EDIT: それは自分の列の両方のスプリッタを持つことは、それを修正することが示唆されました。私はそれを試して、今すぐ最初のスプリッターは、2番目のスプリッターのように列を縮小します。ここ

は、例えばXAMLパッドコードである:

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

答えて

44

両方スプリッタためHorizontalAlignment="Center"を設定してみてください - 全くわからなぜが、それは「右」に設定したことは行動がとても変に行かせていないが、それは私のために働い変更する必要があります:)

+0

あなたを祝福してください!私はこの1つに私の髪を引っ張っていた!!!!! – Vaccano

+2

update:GridSplitterのResizeBehaviourプロパティとの関係は、指定されていない場合はBasedOnAlignmentにデフォルト設定されるため、GridSplitterの列の右側の列のみがサイズ変更されます...もっと確実にmsdnドコを掘り下げる必要があります。 .. – kiwipom

+0

はい、本当にあなたを祝福してください! –

8

A GridSplitterグリッド内の独自の列内に配置されるべきです。私はあなたの問題を完全に理解しているかどうかはわかりませんが、5つのColumnDefinitionsでグリッドを作成することをお勧めします。列1と2を使用してGridSplittersと列0、2、4をコンテンツ用に配置します。

GridSplitter MSDN docには、これを行う方法のサンプルがあります。

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

私はそれを試してみましたが、両方の列が壊れています。変更されたXAMLの最新の質問を参照してください。 – Vaccano

+0

また、この問題は3列の状況でのみ発生することに注意してください。 2つの列はうまく動作します... – Vaccano

+0

私が投稿したサンプルのようにHorizo​​ntalAlignment = "Center"を試していないと思います。 :)あなたが問題を解決してうれしい。 –

関連する問題