我試圖在拖動可拖動項目時創建跟隨鼠標指針的彈出窗口。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;
}
}
而彈出的本身,這居住在我窗戶的主柵格中。
注意
我已經試過了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證實了這一點的隱私權|發佈廣告)。即使this MSDN article說:
這個事件在拖放操作過程中不斷上升。因此,您應該避免事件處理程序中的資源密集型任務。例如,每次引發GiveFeedback事件時,請使用緩存的遊標,而不是創建新的遊標。
委託人爲什麼只被解僱一次?
就是這樣,稍微調整一下,我就按照自己想要的方式設置了它。謝謝! – DerpyNerd