当在拖拽的操作过程中,鼠标或者键盘的按键状态(Ctrl, Shift 或者Alt)发生改变,QueryContinueDrag 事件就会被触发。
下面的例子中,当拖拽的过程中鼠标左键被放开时,改变源控件中的内容。
<Label Content="Drag from here" Background="LavenderBlush"
HorizontalAlignment="Center" Margin="10" Padding="10"
MouseDown="Label1_MouseDown"
QueryContinueDrag="Label1_QueryContinueDrag"/>
<Label Content="To here" Background="SandyBrown" AllowDrop="True"
HorizontalAlignment="Center" Margin="10" Padding="10"
Drop="Label2_Drop"/>
上面两个Label,第一个作为拖动的源,第二个是接收拖动的控件。下面是CS代码。
private void Label1_MouseDown(object sender, MouseButtonEventArgs e)
{
Label lblFrom = e.Source as Label;
if (e.LeftButton == MouseButtonState.Pressed)
DragDrop.DoDragDrop(lblFrom, lblFrom.Content, DragDropEffects.Copy);
}
private void Label1_QueryContinueDrag(object sender, QueryContinueDragEventArgs e)
{
Label lblFrom = e.Source as Label;
if (!e.KeyStates.HasFlag(DragDropKeyStates.LeftMouseButton))
lblFrom.Content = "...";
}
private void Label2_Drop(object sender, DragEventArgs e)
{
string draggedText = (string)e.Data.GetData(DataFormats.StringFormat);
Label toLabel = e.Source as Label;
toLabel.Content = draggedText;
}

