GridSplitter使用键盘工作良好,但使用鼠标时一直弹回来

本文关键字:鼠标 一直 回来 键盘 工作 GridSplitter | 更新日期: 2023-09-27 18:17:16

当用鼠标拖动gridsplitter时-我的网格中的一些splitter工作得很好,而另一些则在我将它们放到新位置之前跳回原始位置。有时,在尝试了很多次后,拖拽它们一点,然后快速释放鼠标按钮,可以帮助解锁它们,但大多数情况下并没有。有时,它们只是在拖动时随机跳到新的位置。

所有这一切,只要点击一个分配器和使用键盘-工作没有任何问题。

似乎这可能与使用分割符的数量有关——分割符越少,这种情况就越少。

如何使它工作与许多列?我的应用程序在一个可滚动的网格中有几十列。我尝试捕获鼠标输入到分割器,但它不起作用。

这似乎是一个类似的问题,但它从来没有回答过,我想我补充了更多的细节。

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

GridSplitter使用键盘工作良好,但使用鼠标时一直弹回来

这看起来像是WPF的一个bug。同样的代码在Silverlight中也能很好地工作。切换到gridsplitter设置HorizontalAlignment="Stretch"并将它们放在每一个其他列中也不起作用。我想最好的解决方法是推出我自己的GridSplitter实现——只是一个处理鼠标和键盘事件并更新托管网格属性的自定义控件…

*编辑

我已经推出了我自己的实现,可以在我的博客