GiveFeedbackイベントをワイヤして、リストビューを超えてadornerの場所を更新します。下記の実施例および方法からListViewのプロパティを更新しました(とlistview_DragLeave方法であなたはadornerを崩壊するとは思わないだろう):
/// <summary>
/// Gets/sets the ListView whose dragging is managed. This property
/// can be set to null, to prevent drag management from occuring. If
/// the ListView's AllowDrop property is false, it will be set to true.
/// </summary>
public ListView ListView
{
get { return listView; }
set
{
if(this.IsDragInProgress)
throw new InvalidOperationException("Cannot set the ListView property during a drag operation.");
if(this.listView != null)
{
#region Unhook Events
this.listView.PreviewMouseLeftButtonDown -= listView_PreviewMouseLeftButtonDown;
this.listView.PreviewMouseMove -= listView_PreviewMouseMove;
this.listView.DragOver -= listView_DragOver;
this.listView.DragLeave -= listView_DragLeave;
this.listView.DragEnter -= listView_DragEnter;
this.listView.GiveFeedback -= listView_GiveFeedback;
this.listView.Drop -= listView_Drop;
#endregion // Unhook Events
}
this.listView = value;
if(this.listView != null)
{
if(!this.listView.AllowDrop)
this.listView.AllowDrop = true;
#region Hook Events
this.listView.PreviewMouseLeftButtonDown += listView_PreviewMouseLeftButtonDown;
this.listView.PreviewMouseMove += listView_PreviewMouseMove;
this.listView.DragOver += listView_DragOver;
this.listView.DragLeave += listView_DragLeave;
this.listView.DragEnter += listView_DragEnter;
this.listView.GiveFeedback += listView_GiveFeedback;
this.listView.Drop += listView_Drop;
#endregion // Hook Events
}
}
}
void listView_GiveFeedback(object sender, GiveFeedbackEventArgs e)
{
if (this.ShowDragAdornerResolved)
this.UpdateDragAdornerLocation();
}
おかげで、私が出会ったデイブ、それは素晴らしい作品... –
もう一つ私はこれで遊んでいた。つまり、2番目のリストビューを表示するアニメーションポップアップがある場合、Adornerは表示されなくなります。これはページ上でのみ表示され、ポップアップでは表示されません。この制約を克服することは可能でしょうか? –
Niharありがとう、窓越しにどのようにレンダリングするかわからないので、いくつかの研究が必要です。 :-) –