我们假设以下情况:
控件(例如,按钮)具有附加行为以启用拖放操作
控件(例如,按钮)具有附加行为以启用拖放操作
<Button Content="test"> <i:Interaction.Behaviors> <SimpleDragBehavior/> </i:Interaction.Behaviors> </Button>
和SimpleDragBehavior
public class SimpleDragBehavior: Behavior<Button> { protected override void OnAttached () { Associatedobject.MouseLeftButtonDown += OnAssociatedobjectMouseLeftButtonDown; Associatedobject.MouseLeftButtonUp += OnAssociatedobjectMouseLeftButtonUp; Associatedobject.MouseMove += OnAssociatedobjectMouseMove; mouseIsDown = false; } private bool mouseIsDown; private void OnAssociatedobjectMouseMove (object sender,MouseEventArgs e) { if (mouseIsDown) { Associatedobject.Background = new SolidColorBrush(Colors.Red); DragDrop.DoDragDrop((DependencyObject)sender,Associatedobject.Content,DragDropEffects.Link); } } private void OnAssociatedobjectMouseLeftButtonUp (object sender,MouseButtonEventArgs e) { mouseIsDown = false; } private void OnAssociatedobjectMouseLeftButtonDown (object sender,MouseButtonEventArgs e) { mouseIsDown = true; } }
现在的任务是确定拖动何时结束,以恢复按钮的原始背景.
在跌落目标上下潜时没问题.但是,我如何认识到某些不是下降目标的东西呢?在最糟糕的情况下:在窗外?
解决方法
DragDrop.DoDragDrop在完成拖放操作后返回.
是的,“启动拖放操作”令人困惑,因为它可以被读作“开始拖放并返回”:
是的,“启动拖放操作”令人困惑,因为它可以被读作“开始拖放并返回”:
private void OnAssociatedobjectMouseMove (object sender,MouseEventArgs e) { if (mouseIsDown) { Associatedobject.Background = new SolidColorBrush(Colors.Red); var effects = DragDrop.DoDragDrop((DependencyObject)sender,DragDropEffects.Link); // this line will be executed,when drag/drop will complete: Associatedobject.Background = //restore color here; if (effects == DragDropEffects.None) { // nothing was dragged } else { // inspect operation result here } } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。