0

私は XAML/C# WinRT アプリに取り組んでいます。アプリには、グループ化されたソースを含む Gridview があります。Gridview に手動のドラッグ アンド ドロップ機能を実装しています (MS は、その優れた知恵により、グループ化された Gridview でその重要な機能をスキップすることを決定したためです)。

私が直面している問題の 1 つは、ドラッグされているコントロールへの参照を取得しようとすることです。DragItemsStarting イベントには、次のものがあります。

private void GVDragItemsStarting(object sender, DragItemsStartingEventArgs e)
{
var item = e.Items.FirstOrDefault();
if (item == null)
    return;

e.Data.Properties.Add("item", item);
}  

ただし、ここでの送信者は GridView であり、ドラッグされるコントロールではなく、e.Items[0] は実際のコントロールではなく、基になるデータ モデル オブジェクトを指します。ドロップが発生する前に、ドラッグ イベント チェーンのどこかにドラッグされている実際のコントロールを取得する方法はありますか? PointerPressed イベントをのぞき見しようと思っていたのですが、ドラッグ中も発火しませんでした。

これは、明らかな何かが欠けていると思うのは簡単なことのようです。

ご協力いただきありがとうございます。

4

3 に答える 3

1

の使用を提案したようContainerFromItemに、ハンドラーで元のイベントを発生させた GridView を参照することをお勧めします。

private void GVDragItemsStarting(object sender, DragItemsStartingEventArgs e) 
{ 
   GridView g = (GridView)sender;
   var draggedControl = g.ContainerFromItem(e.Items[0]);
   // ...
}
于 2014-12-04T22:22:55.137 に答える
0

イベントを少し試した後、次のことがわかりました。ManipulationStarting イベントを処理し、e.Container または e.OriginalSource のいずれかをクラス変数に格納して、後でドラッグ イベントでアクセスすることにより、コントロールをドラッグすることができます。

于 2012-11-26T06:57:52.210 に答える
0

さらに良い解決策は次のとおりです。これは、変数の追跡を必要としません。

var draggedControl = itemGridView.ItemContainerGenerator.ContainerFromItem(e.Items[0]);
于 2012-11-27T20:09:25.133 に答える