WPF在网格外使用GridSplitter跳转重新调整大小问题(WPF Using GridSplitter outside of a grid Jumping re

编程入门 行业动态 更新时间:2024-10-17 18:13:28
WPF在网格外使用GridSplitter跳转重新调整大小问题(WPF Using GridSplitter outside of a grid Jumping re-size issue)

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

结果的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'm using a GridSplitter outside of a grid in a DockPanel to try and control the width of my docked items. I'm using it because of it has all the necessary drag events built in. The issue i'm having is that since when i re-size my docked item, the GridSplitter is moving to accommodate the width, thus throwing the Splitters Horrizontal Change value out.

Gif of the result:

You can also see by the console output of the HorrizontalChange value on the splitters DragDelta event exactly whats happening to the internal value.

The code i'm using for this can be found below:

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 think i must be using the information on the events wrong, or have a floor in my maths. What can i do to fix this? Or alternatively is there a better way for me to do this that wont encounter the problem?

最满意答案

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>

The UI(DockContainerRight.Width) update in Window.xaml.cs causes the problem. You can try to wrap the GridSplitter and DockContainerRight in a grid.

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

更多推荐

使用,using,GridSplitter,DockPanel,电脑培训,计算机培训,IT培训"/> <meta name=&qu

本文发布于:2023-08-05 21:46:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1441019.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:网格   跳转   大小   WPF   GridSplitter

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!