2

我的一个窗口中有一个 SizeChanged 事件。其中一个用户控件 Width 的行为很有趣,因此我决定在 SizeChanged 事件中静态设置窗口的宽度。问题是,当我在 size changed 事件中设置窗口的大小时,它会触发另一个 size changed 事件!我希望用户能够调整窗口大小,然后只触发一次事件。我试过了 :

e.Handled = true;

以及在窗口构造函数中添加事件处理程序,并在大小更改事件中删除它。(这使得它只能触发一次,并且在窗口的生命周期内永远不会再次触发)。有任何想法吗?

4

3 回答 3

1

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

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

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

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

于 2012-11-28T15:57:47.973 回答
0

您可以使用 aboolean来确定是否处理您的事件。

private bool m_handleResizeEvent;
private void HandleResize(object sender, EventArgs e)
{
    if (m_handleResizeEvent)
    {
         m_handleResizeEvent = false;
         // perform your resize here
         m_handleResizeEvent = true;
    }
}
于 2012-11-28T15:46:47.917 回答
0

原来是我的 Window 的 XAML 中的 SizeToContent="Width" 属性导致 SizeChanged 被多次调用。删除此属性解决了我的问题,并允许我调整窗口大小而无需多次触发事件。感谢其他所有人的回答和投入!

于 2012-11-28T16:27:06.103 回答