簡體   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