DockPanel
のグリッド外でGridSplitter
を使用して、ドッキングされたアイテムの幅を制御しています。私は必要なすべてのドラッグイベントが組み込まれているので、私はそれを使用しています。私が持っている問題は、ドッキングされたアイテムのサイズを変更すると、GridSplitter
が幅に対応するように移動しているため、Splitters Horrizontal Change値を出す。結果のWPFグリッド外でのGridSplitterの使用
のGIF:
また、内部値に起こって正確にいただきました!スプリッタDragDeltaイベントにHorrizontalChange
値のコンソール出力で見ることができます。
私はこのために使用している以下のコードは、見つけることができます:
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私が間違った出来事についての情報を使用していなければならない、または私の数学の中に床を持っていなければならないと思います。これを修正するにはどうすればよいですか?それとも、問題に遭遇することなく、これを行うためのより良い方法がありますか?
私のメインページでは、何か狂ったサイズ変更の動作を引き起こし、それはDockContainerのサイズを変更していません。 –
回答が更新されました。 DockContainerLeft、DockContainerRight、およびGridSplitterをグリッドにラップしてみます。 –
私はDockPanelを実際に使用しているわけではないので、あなたが提案したようにそれを分割することはおそらくそれをやり遂げるためのより良い方法でしょう。 –