我基本上想要的是相当于this代码,即我有一些昂贵的操作,我只想在用户实际看到更新时才能这样做。
请注意,这与仅捕获IsVisibleChanged
事件不同,因为这只有在我们真正隐藏窗口时才有效,但如果其他窗口覆盖它则不会。
此外,我不寻找解决问题的代码与Raymond在C ++中完全相同 - 我正在寻找WPF中最惯用的解决方案,只要结果是我觉得很好!
答案 0 :(得分:1)
我知道您想要更多以WPF为中心的答案,但您正在寻找的是更多系统级信息。即你的窗户是否可见或被另一扇窗户覆盖。我认为雷蒙德的想法是有道理的,但是既然Wpf会隐藏你的WndProc,你需要做一些类似于这个博客文章由Andrew Eichacker在Attaching to WndProc in WPF描述。然后,您应该能够根据链接建议拦截WM_PAINT消息。
从上面链接:
在窗口的SourceInitialized事件中,创建一个HwndSource对象 从你的窗口的句柄。使用AddHook方法附加事件 使用提供的函数处理所有窗口事件。
答案 1 :(得分:0)
使用Window.IsActive怎么样?