我在GridSplitter
的网格外使用DockPanel
来尝试控制停靠项目的宽度。我正在使用它,因为它内置了所有必要的拖动事件。我遇到的问题是,当我重新调整停靠项目的大小时,GridSplitter
正在移动以适应宽度,因此投掷Splitters Horrizontal Change value out。
结果的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>
我认为我必须使用有关事件的错误信息,或者在我的数学中占一席之地。我该怎么做才能解决这个问题?或者,有没有更好的方法让我这样做不会遇到问题?
答案 0 :(得分:1)
Window.xaml.cs中的UI(DockContainerRight.Width)更新导致了问题。您可以尝试将GridSplitter和DockContainerRight包装在网格中。
LIKE