繁体   English   中英

在WPF中停止事件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM