1

いくつかの項目を含む単一選択モードの ListBox があります。ユーザーがドラッグ&ドロップでアイテムを並べ替えることができるように実装しました。すべて正常に動作しますが、マウスボタンが押された状態でカーソルが項目の上を移動すると、リストボックスが項目を自動的に選択するため、見栄えが非常に悪くなります。

具体的に言うと、状況によってはちらつきを無効にするために、アイテムが別のアイテムの上に半分以上ドラッグされた場合にのみ、アイテムを移動します。item2の上にitem1をドラッグしてitem2の後ろに配置すると、ドラッグ中にitem1が選択されます。何が起こるかというと、カーソルが item2 の上に移動するとすぐに item2 が選択されます。どうすればこの動作を取り除くことができますか?

アイテムのドラッグ中に PreviewMouseMove で e.Handled = true を設定しようとしましたが、これは役に立ちません。

コードを見たい場合は、ここにあります: http://pastebin.com/GTj96qV9 . これは、DataSource として IList を持つすべてのリストボックスを有効にして、その内容をドラッグして並べ替えることができる動作です。

4

3 に答える 3

1

私にとって最もクリーンな解決策は、ItemsControlから継承し、独自の「セレクター」を実装することでした。

于 2012-05-08T08:30:43.623 に答える
0

これはリストビューです。そして、私はあなたのコードの詳細には立ち入りませんでした. しかし、私は ListViewItem で PreviewMouseLeftButtonDown を実行していますが、あなたが説明した問題はありません。

 <ListView.ItemContainerStyle>
            <Style TargetType="{x:Type ListViewItem}">
                <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListView1Item_PreviewMouseLeftButtonDown" />
                <Setter Property="AllowDrop" Value="True" />
                <EventSetter Event="DragDrop.Drop" Handler="ListView1Item_DragDrop" />
                <Style.Triggers>                     
                    <DataTrigger Binding="{Binding DispDetail}" Value="False">
                        <Setter Property="Visibility" Value="Collapsed"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ListView.ItemContainerStyle>      
于 2012-04-30T13:33:07.543 に答える
0

これはドロップ部分を台無しにする可能性がありますが、ListBoxItem のマウス キャプチャを試してみましたか? MSDN には、これに関する詳細があります

お役に立てれば。

于 2012-04-30T13:28:17.590 に答える