管理可以移动物品的空间 (Silverlight)

发布于 2024-10-14 00:40:57 字数 421 浏览 5 评论 0原文

我正在考虑更好的方法来管理我的应用程序中的“工作区”,用户可以在该空间中移动事物,例如可以进行平移。

假设我有我的应用程序界面,周围有一些按钮、树视图等,中间有一个画布,其中有一些用户可以移动和使用的小部件,他可以平移这个空间以在其中移动。

对于平移,我正在考虑处理这个空间中的 MouseLeftButtonDown (将布尔值“UserMoving”切换为 true),并在 MouseMove 上处理该空间的平移(来自两个事件之间的 Delta),直到我检测到 MouseLeftButtonUp,就知道他已经停止了(UserMoving 为 false)。问题是,如果用户“鼠标左键向上”不在空间本身(画布)上,我永远不会知道他已经释放了鼠标。管理他可以在应用程序中的任何位置释放平移(或小部件的拖放)这一事实的最佳方法是什么?

有人已经处理过类似的事情并且可以帮助我吗?

I'm thinking at the better way to manage a "workspace" in my application, where the user could move things in this space, and could pan for instance.

Let's imagine I have my application interface, with some buttons all around, a treeview etc. and in the middle, a Canvas with some widgets the user can move and work with, and he could pan this space to move in it.

For the pan, I was thinking to handle the MouseLeftButtonDown in this space (that switch a boolean "UserMoving" to true), and on the MouseMove, to apply on translation to the space (from the Delta between the 2 events), until I detect a MouseLeftButtonUp, to know he has stopped (UserMoving to false). The problem is that if the user "mouse left button up" not on the space itself (a Canvas), I will never know he has released the mouse. What's the best to manage the fact that he can release the pan (or the drag&drop of a widget) wherever in the application?

Do anybody has already manage something like that and can help me?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无人问我粥可暖 2024-10-21 00:40:57

您应该调用 UIElement.CaptureMouse 在画布上按下鼠标。这将使画布保持接收鼠标事件,即使用户移动到其区域之外。

鼠标抬起时,调用 释放鼠标捕获

You should call the UIElement.CaptureMouse on your Canvas at the mouse down. This will keep the canvas receiving mouse events, even if the user moves outside of it's region.

On mouse up, call ReleaseMouseCapture.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文