如何检测控件是否正在移动?

10
假设我有一个带有自定义UserControl的窗口,并且该UserControl内部有一个文本框。当我拖动窗口时,如何让TextBox检测到它正在移动?
我尝试搜索其RenderTransform属性,其中会在“可冻结对象或其对象更改时”触发Change事件。没有什么确切的结论。
编辑:
在我的情况下,我看不到窗口,我只看到UserControl,而我无法进一步操作。
2个回答

9

由于您的文本框实际上没有移动(很可能与窗口相对位置不变),因此您需要订阅窗口事件,以便获得通知。您可以订阅Window.LocationChanged事件,以便在窗口移动时收到通知。

但是,如果您的控件没有绝对位置,则需要解析Window.SizeChanged事件,该事件将告诉您用户何时调整了窗口大小,但它是一个离散的最终事件,而不是正在进行的事件。


1
谢谢。但是在我的情况下这并不起作用,因为实际上文本框位于一个用户控件内部,该用户控件位于一个粘性MDI窗口内。从我的代码中,我看不到MDI,因此无法根据它做任何事情。我之前说有一个窗口只是为了简化情况。我需要以不同的方式处理这种情况。它不应该是一个触发事件并告诉所有人它们已经被移动的框架。文本框必须自己检测到其位置已更改。 - Mohamed
1
这对于使用拖放控件的应用程序也不起作用...这正是我所遇到的问题。 - Adam Mills

7
尝试订阅UserControl的LayoutUpdated事件。

2
这是一个好的提示。在使用LayoutUpdated时,请确保在执行昂贵的操作之前检查控件是否已移动。 LayoutUpdated事件不仅适用于位置更改。如果您在控件上动画任何内容,则LayoutUpdated事件往往会频繁触发。 - Parrhesia Joe
1
当您的控件位于WindowsFormHost中并且窗口不可访问(据我所知)时,这是非常好的解决方案。 - deight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接