我正在改进标准WPF TabControl。我想为它添加取消停靠功能: 用户在TabControl外部拖动页面,此页面在窗口中取消停靠。 我想在这个控件中有两个事件 - PageDragStart(当页面拖到外面时引发)和PageDragEnd(当页面掉到外面时引发)
第一次活动我没有问题。
但是第二个...... OnDrop没有调用,因为该项目在tabcontol容器之外掉线。我怎么知道它被丢弃了?
P.S。我想要一个通用控件(因此,不应该连接取消停靠功能并使用窗口tabcontrol进行硬编码或类似的东西)
答案 0 :(得分:1)
为什么要使用DoDragDrop
?当我阅读您的描述时,单独使用Mouse.Capture
似乎是一个明显的解决方案:
您可能认为DoDragDrop超过简单鼠标捕获的原因是:
您显然不需要OLE集成或多应用程序支持,并且您希望自定义命中测试,因此DoDragDrop似乎没有直接处理鼠标捕获的优势。
答案 1 :(得分:0)
我以相当野蛮和不安全的方式解决了这个问题。但是因为它可以作为临时解决方案。
好吧,当我提出PageDragStart事件时,我调用了Mouse.Capture(this,CaptureMode.SubTree); 当页面被丢弃时 - DoDragDrop抛出不同的异常(COMException,NullReference(我找不到哪个对象为null)和其他一些我不记得的异常)。 我捕获异常并调用PageDragEnd事件(如果属性IsPageDraggingOut设置为true)。
据你所知,这个解决方案真的很脏而且很糟糕。但它确实有效。
那么,任何其他想法(或一些想法如何正确使用Mouse.Capture)?