1

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

1 に答える 1

1

WPFのバグのようです。同じコードが Silverlight でも完全に機能します。Horizo​​ntalAlignment="Stretch" を設定する GridSplitters に切り替えて、それらを 1 つおきの列に配置しても機能しません。最良の回避策は、GridSplitter の独自の実装をロールアウトすることだと思います。これは、マウスとキーボードのイベントを処理し、ホストしているグリッドのプロパティを更新するカスタム コントロールです...

*編集

私は独自の実装を展開しましたが、それは私のブログで入手できます

于 2011-12-10T22:11:52.230 に答える