我已经退出了一段时间,无法找到解决这个假设的简单任务的解决方案。我通过事件触发器使用了两个事件,即“激活”和“激活”。并且“关闭”#39;事件
我正在使用'已激活'更新我的窗口的事件,但是当我从任务栏关闭应用程序时,我不希望它被触发。有什么想法吗?
我的程序在XAML代码中包含以下eventtrigger:
<i:Interaction.Triggers>
<i:EventTrigger EventName="Activated" >
<i:InvokeCommandAction Command="{Binding WindowActivated}" />
</i:EventTrigger>
<i:EventTrigger EventName="Closing">
<i:InvokeCommandAction Command="{Binding ClosingCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
答案 0 :(得分:0)
据我所知,这是不可能的。而且它与WPF或MVVM无关,它就是Windows自己处理的方式。当您右键单击任务栏时,您会将焦点从应用程序中移开,这样您将获得一个停用事件。从弹出菜单中选择close将导致窗口发送WM_SYSCOMMAND / SC_CLOSE,但它必须首先激活您的窗口,并且在应用程序级别无法知道启动此操作的系统线程的未来意图。
我认为你有两个选择。第一种是使用DispatcherTimer在Activate和窗口更新之间添加一个小延迟,足够长的时间以便后续的关闭消息到达。
第二种是在CompositionTarget.Rendering event处理程序中进行更新。即使应用程序没有焦点也会触发此事件(如果您不想要后台更新,则可能需要跟踪自己的事件),但WM_ACTIVATE事件之后的SC_CLOSE事件应该足够快,以便它在到达之前到达下一个CompositionTarget.Rendering事件,此时您知道您的应用程序正在关闭,因此可以忽略所有后续更新。