Windows.Activated在wpf中多次触发

时间:2015-01-21 10:56:20

标签: wpf windows

嗨我有一个代码可以在窗口(WPF窗口)激活时编写,就像点击窗口或使用alt / tab一样。窗口是主窗体的子窗口(Windows应用程序)。我使用ToolWindow作为windowstyle。

它有一个xamdatagrid,必须在激活时更新

问题是它多次发生。它应该被解雇一次。我不希望我的代码多次运行

如何使其发挥作用。请帮忙

2 个答案:

答案 0 :(得分:0)

来自MSDN上的Window.Activated Event页:

  

当窗口成为前景窗口时发生。

Window.Activated事件假设被多次调用,所以也许它不是你要处理的最佳事件。或者,您可以添加bool isFirstTime变量并使用它来限制您的代码仅被调用一次。举个例子:

private bool isFirstTime = true;

...

private void WindowActivated(object sender, EventArgs e)
{
    if (isFirstTime)
    {
        isFirstTime = false;
        // do something here just once
    }
}

但是,(来自链接页面)......

  

在以下情况下激活窗口(成为前景窗口):

     

•首先打开窗口    •用户通过鼠标选择,按ALT + TAB或从任务管理器切换到窗口    •用户单击窗口的任务栏按钮。

......你可能会发现这对你不起作用。

答案 1 :(得分:-1)

我完成了。 我使用下面的代码

 private void OnAttributeHistoryWindowActivated(object sender, EventArgs e)
 {
        var win = ((RoutedEventArgs)(e)).Source as AttributeHistoryWindow;
       //My Code
 }

第一行代码是重新启动Activated事件。它永远不会进入我的代码enter code here

的下一行

现在我使用下面的代码,它可以工作。

 private void OnAttributeHistoryWindowActivated(object sender, EventArgs e)
 {
       var win = sender as AttributeHistoryWindow;
       //My Code
 }

现在它会发射一次。