0

カスタムコントロールを含むスタックパネルがあります。標準のMouseDragElementBehaviorを各アイテムに添付します。

右にドラッグすると、アイテムが他のアイテムの下に移動します。

より良いユーザーエクスペリエンスを作成するための実行可能なソリューションは何でしょうか-より良い視覚的な手がかりを表示するために-アイテムがどのように移動し、どこにドロップされるのか。

4

2 に答える 2

1

少しいじくり回した後、スタックパネル内で他の要素に覆われていない状態で右にドラッグできるものは何もないことに気付きました。右のアイテムをドラッグしない限り。

それを解決するために私がしたこと:

  1. 視覚的な合図を作成しました(ドラッグ操作中にそれを表すための一般的なアイテムの半分透明な形状)
  2. キューを非表示にし(width = 0)、スタックパネルの子の最後の要素として常に保持します
  3. スタックパネルをマウスの左ボタンで上下左右に移動するようにサブスクライブしました
  4. コードでエミュレートされたドラッグ/ドロップ
  5. ドラッグが開始されたら、キューを表示に変え、その移動変換を現在のマウス座標に設定します
  6. すべてのマウス移動イベントで平行移動変換を調整します
  7. ドロップすると、キューを再び非表示にして、アイテムを好きなように再配置します。

もう一度強調するには、どのような方法でも、StackPanel.Childrenコレクションの最後の要素を操作する必要があります...。

于 2010-03-13T14:14:23.283 に答える
0

MouseDragElementBehaviorが必要な方法で機能しない場合は、いつでもクラスから降りて、必要に応じてカスタマイズできます。例えば:

public class DragBehvaior : MouseDragElementBehavior
{
    public DragBehvaior()
    {
        this.DragBegun += new MouseEventHandler(DragBehvaior_DragBegun);
    }

    void DragBehvaior_DragBegun(object sender, MouseEventArgs e)
    {
        var element = this.AssociatedObject as UIElement;
        // Calculate the correct ZIndex here.
        Canvas.SetZIndex(element, 100);
    }
}
于 2010-03-12T13:17:26.910 に答える