GridSplitter 使用键盘工作正常,但使用鼠标时不断弹回
当用鼠标拖动 GridSplitters 时 - 我的网格中的一些分割器工作正常,而其他分割器在我将它们放到新位置之前跳回到原始位置。有时,在尝试多次并稍微拖动它们并快速释放鼠标按钮后,可以帮助解锁它们,但大多数情况下都不会。有时 - 它们只是在拖动时随机跳到新位置。
所有这一切都只需单击分离器并使用键盘即可完成,没有任何问题。
看起来这可能与所使用的分离器的数量有关 - 分离器越少,这种情况发生的就越少。
如何使其与许多列一起使用?我的应用程序在可滚动网格中有数十列。我尝试捕获鼠标输入到分离器,但它不起作用。
这似乎与另一个问题类似,但从未得到解答,我想我添加了更多详细信息。
<Window
x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow"
Height="480"
Width="800">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="300*" />
</Grid.ColumnDefinitions>
<GridSplitter
Grid.Column="0"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="1"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="2"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="3"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="4"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="5"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="6"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="7"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="8"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="9"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="10"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="11"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="12"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="13"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="14"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
</Grid>
</Window>
When dragging GridSplitters with a mouse - some splitters in my grid work fine, while others jump back to original position before I can drop them at a new position. Sometimes after trying many times and dragging them a little bit and quickly releasing the mouse button helps unblock them, but most often it does not. Sometimes - they just all randomly jump to new positions when dragged.
All this while just clicking on a splitter and using the keyboard - works without any problems.
It seems like it might be related to the number of splitters used - it happens less with fewer splitters.
How to make it work with many columns? My application has dozens of columns in a scrollable grid. I tried capturing mouse input to the splitters, but it did not work.
It seems to be similar problem to another question, but it was never answered and I think I added more details.
<Window
x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow"
Height="480"
Width="800">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="40*" />
<ColumnDefinition
Width="300*" />
</Grid.ColumnDefinitions>
<GridSplitter
Grid.Column="0"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="1"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="2"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="3"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="4"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="5"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="6"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="7"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="8"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="9"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="10"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="11"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="12"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="13"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
<GridSplitter
Grid.Column="14"
Width="6"
HorizontalAlignment="Right"
VerticalAlignment="Stretch" />
</Grid>
</Window>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
它看起来像是 WPF 的一个错误。相同的代码在 Silverlight 中运行得非常好。切换到设置 HorizontalAlignment="Stretch" 的 GridSplitters 并将它们放入每隔一列中也不起作用。我想最好的解决方法是推出我自己的 GridSplitter 实现 - 只是一个自定义控件,用于处理鼠标和键盘事件并更新托管网格的属性...
*编辑
我确实推出了自己的实现,它可以在我的博客
It looks like a bug with WPF. Same code works perfectly well in Silverlight. Switching to GridSplitters that set HorizontalAlignment="Stretch" and putting them in every other column does not work either. I suppose the best workaround is to roll out my own implementation of a GridSplitter - just a custom control that handles mouse and keyboard events and updates properties of the hosting Grid...
*EDIT
I did roll out my own implementation and it is available on my blog