WPF在网格外使用GridSplitter跳转重新调整大小问题

时间:2016-05-15 14:22:34

标签: c# wpf

我在GridSplitter的网格外使用DockPanel来尝试控制停靠项目的宽度。我正在使用它,因为它内置了所有必要的拖动事件。我遇到的问题是,当我重新调整停靠项目的大小时,GridSplitter正在移动以适应宽度,因此投掷Splitters Horrizontal Change value out。

结果的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>

我认为我必须使用有关事件的错误信息,或者在我的数学中占一席之地。我该怎么做才能解决这个问题?或者,有没有更好的方法让我这样做不会遇到问题?

1 个答案:

答案 0 :(得分:1)

Window.xaml.cs中的UI(DockContainerRight.Width)更新导致了问题。您可以尝试将GridSplitter和DockContainerRight包装在网格中。

LIKE