[英]Stop events in WPF
是否可以在WPF中停止/挂起引发的事件? 当窗口触摸屏幕侧时,我想停止诸如SizeChanged,LocationChanged,MouseDown之类的事件。
现在,我无法修改窗口尺寸,因为其他事件会以某种方式覆盖这些值。
编辑我发现,我的问题是由引发的事件引起的,该事件覆盖了我的窗口对象(我想是),因为当我在所有事件中打印窗口尺寸时,发生了在更改其他事件后导致设置原始尺寸的情况。
要取消订阅某个事件,只需在您要停止的地方键入此内容即可。
例如:SizeChanged;
this.SizeChanged -= MethodName;
抱歉,您无法暂停事件的触发。 您可以使用类似于订阅它们的EventHandlers
取消订阅:
object.someEventHandler -= someMethodOrDelegate
或者您可以根据特殊情况抑制事件的冒泡/消隐:
private void SomeEventHappened(object sender, RoutedEventArgs e)
{
if(someCondition)
e.Handled = true;
else
DoSomeWork();
}
根据您对问题的编辑和评论,据我了解,您有更改窗口尺寸的事件,这些事件使您无法手动调整窗口大小。 而且,您的事件处理程序不是WPF发起的(它们使用EventArgs
而不是RoutedEventArgs
)。 如果我正确理解,一个解决方案可能是具有一个类范围的布尔变量(或根据您的需要为internal
)的布尔变量,该变量保存是否允许/覆盖尺寸:
bool allowManualResize = false;
然后,当您手动进行尺寸修改时,请将此变量设置为true
:
private void SomeManualSizingEventHandler(object sender, EventArgs e)
{
allowManualResize = true;
....
这些之后,您可以在覆盖新值的事件中检查该值:
private void SomeUpperLevelResizeHandler(object sender, EventArgs e)
{
// Check if resizing is allowed,
if(!allowManualResize)
{
// do your default things here
....
当然,您需要找到一个合适的位置,将allowManualResize
设置为false,以免将来触发。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.