如果您需要 MVVM,则可以检查此解决方案:在您的 .xaml 文件中添加:
<ContentControl Content="{Binding Content, Mode=TwoWay}" AllowDrop="True" Name="myDesignerContentControl" />
比在您的 ViewModel 中添加以下内容:
private Panel _content;
public Panel Content {
get { return _content; }
set {
_content = value;
if (_content != null) {
RegisterDragAndDrop();
}
base.RaisePropertyChanged("Content");
}
}
private void RegisterDragAndDrop() {
Content.Drop += OnDrop;
Content.PreviewMouseLeftButtonDown += OnMouseLeftButtonDown;
Content.PreviewDragOver += OnDragOver;
}
private void OnDesignerDrop(object sender, DragEventArgs e) {
//some custom logic handling
}
private void OnDesignerMouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
var control = (FrameworkElement)e.Source;
//some custom logic handling for doing drag & drop
}
private void OnDesignerDragOver(object sender, DragEventArgs e) {
//some custom logic handling for doing drag over
}
这个想法是你应该使用控件而不是鼠标位置,这将是更简单和合乎逻辑的方法。上面的代码是在 MVVM 中使用的方法示例,用于拥有一个内容区域,您可以在该内容区域上执行某些控件的拖放操作。背后的想法也适用于在两个列表框之间拖放数据,您可能在同一内容区域上。
希望这可以帮助。