ドラッグ可能なアイテムをドラッグしているときにマウスポインタの後にポップアップを作成しようとしています。WPF DragDrop.GiveFeedbackが連続的に起動しない
次つむは、マウスポインタでポップアップを開きますが、私は私がポップアップ位置を更新できるようにするGiveFeedback
デリゲートに依存している(ポインタが移動する場合には、ある)
private void Members_DragOver(object sender, DragEventArgs e)
{
dragPopup.DataContext = DraggedItem;
var mousePoint = Mouse.GetPosition(this);
dragPopup.HorizontalOffset = mousePoint.X + this.Left + 10;
dragPopup.VerticalOffset = mousePoint.Y + this.Top + 10;
dragPopup.IsOpen = true;
}
private void Members_GiveFeedback(object sender, GiveFeedbackEventArgs e)
{
if (dragPopup.IsOpen)
{
var mousePoint = Mouse.GetPosition(this);
dragPopup.HorizontalOffset = mousePoint.X + this.Left + 10;
dragPopup.VerticalOffset = mousePoint.Y + this.Top + 10;
dragPopup.IsOpen = true;
}
}
、ポップアップ自体私の窓のメイングリッドに住んでいた。
NOTE
私はMouseMove
かPreviewMouseMove
時の位置を取り扱う試してみたが、これらのイベントは、ドラッグアンドドロップ手順の間に完全に無視されます。
<Popup x:Name="dragPopup" Placement="MousePoint">
<Border BorderThickness="2" Background="White" DataContext="{Binding}">
<StackPanel Orientation="Horizontal" Margin="4,3,8,3">
<TextBlock Text="{Binding FullName}" FontWeight="Bold" VerticalAlignment="Center" Margin="8,0,0,0" />
</StackPanel>
</Border>
</Popup>
GiveFeedback
デリゲート火災回だけ(5つの確認本のhitcounterでブレークポイントを設定します)。 this MSDN articleさんのコメント:
このイベントは、ドラッグアンドドロップ操作中に引き続き発生します。したがって、イベントハンドラではリソースを大量に消費するタスクを避ける必要があります。たとえば、GiveFeedbackイベントが発生するたびに新しいカーソルを作成する代わりに、キャッシュされたカーソルを使用します。
なぜデリゲートは1回だけ起動されますか?
それは、ちょっと微調整して、私が望むように設定しました。ありがとう! – DerpyNerd