2016-05-15 15 views
0

DockPanelのグリッド外でGridSplitterを使用して、ドッキングされたアイテムの幅を制御しています。私は必要なすべてのドラッグイベントが組み込まれているので、私はそれを使用しています。私が持っている問題は、ドッキングされたアイテムのサイズを変更すると、GridSplitterが幅に対応するように移動しているため、Splitters Horrizontal Change値を出す。結果のWPFグリッド外でのGridSplitterの使用

のGIF:

enter image description here

また、内部値に起こって正確にいただきました!スプリッタDragDeltaイベントにHorrizontalChange値のコンソール出力で見ることができます。

enter image description here

私はこのために使用している以下のコードは、見つけることができます:

Window.xaml.cs:

 private double _rightContainerWidthBeforeDrag; 

     private void RightGridSplitter_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) 
     { 
      Console.WriteLine("Change: " + e.HorizontalChange); 
      DockContainerRight.Width = _rightContainerWidthBeforeDrag + e.HorizontalChange * -1; 
     } 

     private void RightGridSplitter_DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e) 
     { 
      Console.WriteLine("Started: " + DockContainerRight.ActualWidth); 
      _rightContainerWidthBeforeDrag = DockContainerRight.ActualWidth; 
     } 

     private void RightGridSplitter_DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e) 
     { 
      _rightContainerWidthBeforeDrag = DockContainerRight.ActualWidth; 
     } 

Window.xaml

<DockPanel> 
     <controls:DockContainer x:Name="DockContainerLeft" DockPosition="Left" DockPanel.Dock="Left"/> 
     <controls:DockContainer x:Name="DockContainerRight" DockPosition="Right" DockPanel.Dock="Right"/> 
     <controls:DockContainer x:Name="DockContainerBottom" DockPosition="Bottom" DockPanel.Dock="Bottom"/> 

     <GridSplitter Name="RightGridSplitter" DockPanel.Dock="Right" ResizeDirection="Columns" Width="3" Height="Auto" Margin="0" 
      DragDelta="RightGridSplitter_DragDelta" 
      DragStarted="RightGridSplitter_DragStarted" 
      DragCompleted="RightGridSplitter_DragCompleted"/> 
    </DockPanel> 

I私が間違った出来事についての情報を使用していなければならない、または私の数学の中に床を持っていなければならないと思います。これを修正するにはどうすればよいですか?それとも、問題に遭遇することなく、これを行うためのより良い方法がありますか?

答えて

1

Window.xaml.csのUI(DockContainerRight.Width)更新により問題が発生します。 GridSplitterとDockContainerRightをグリッドでラップすることができます。

<DockPanel> 
      <controls:DockContainer x:Name="DockContainerBottom" Height="50" DockPanel.Dock="Bottom"/> 
      <Grid > 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*"/> 
        <ColumnDefinition Width="Auto"/> 
        <ColumnDefinition Width="200"/> 
       </Grid.ColumnDefinitions> 
       <controls:DockContainer x:Name="DockContainerLeft" Grid.Column="0" /> 
       <GridSplitter Grid.Column="1" VerticalAlignment="Stretch" HorizontalAlignment="Center" Width="3" Margin="0"/> 
       <controls:DockContainer x:Name="DockContainerRight" Grid.Column="2" /> 

      </Grid> 
     </DockPanel> 
+0

私のメインページでは、何か狂ったサイズ変更の動作を引き起こし、それはDockContainerのサイズを変更していません。 –

+0

回答が更新されました。 DockContainerLeft、DockContainerRight、およびGridSplitterをグリッドにラップしてみます。 –

+0

私はDockPanelを実際に使用しているわけではないので、あなたが提案したようにそれを分割することはおそらくそれをやり遂げるためのより良い方法でしょう。 –

関連する問題