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