递归触发SizeChanged事件

时间:2012-11-28 15:39:41

标签: c# wpf events

我的一个窗口中有一个SizeChanged事件。其中一个用户控件Width表现得很有趣,所以我决定在SizeChanged事件中静态设置窗口的宽度。问题是,当我在尺寸改变事件中设置窗口的大小时,它会触发另一个尺寸改变的事件!我希望用户能够调整窗口大小,然后只触发一次事件。我试过了:

e.Handled = true;

除了在窗口构造函数中添加事件处理程序,并在size changed事件中删除它。 (这使得它只能射击一次,并且不会在窗口的生命周期中再次射击)。有任何想法吗?

3 个答案:

答案 0 :(得分:1)

你应该使用私有bool并在大小改变时更改其值

bool _sizeChanged=false;
void handleResize(Object sender, EventArgs e)
{
  if (_sizeChanged==false)
  {
    // do stuff
  }
   _sizeChanged=true;
}

但是还不够,因为您应该在其他地方再次更改其值。如果你不改变它的值(例如在其他地方改为假),它将永远不会通过'如果'条件再次。所以问题是,你应该在哪里改变它的价值。

我认为你可以更改MouseButtonUp事件的值,因为调整大小是用鼠标完成的。

答案 1 :(得分:0)

您可以使用boolean来确定是否处理您的活动。

private bool m_handleResizeEvent;
private void HandleResize(object sender, EventArgs e)
{
    if (m_handleResizeEvent)
    {
         m_handleResizeEvent = false;
         // perform your resize here
         m_handleResizeEvent = true;
    }
}

答案 2 :(得分:0)

原来是我的Window XAML中的SizeToContent =“Width”属性导致多次调用SizeChanged。删除此属性修复了我的问题,并允许我调整窗口大小,而不会多次触发事件。感谢其他人的答案和意见!