我有一个WPF用户控件,我需要强制渲染RenderMode.SoftwareOnly.由于我使用的是.NET 3.5,我不得不做类似的事情,
var hwndSource = PresentationSource.FromVisual(this) as HwndSource;
if (hwndSource != null)
{
hwndSource.CompositionTarget.RenderMode = RenderMode.SoftwareOnly;
}
Run Code Online (Sandbox Code Playgroud)
但这不适用于我的应用程序,WPF程序在少数几台机器上崩溃,关闭注册表级别的硬件加速似乎解决了这个问题.
上面的代码是在Loaded窗口的情况下编写的.如果我是正确的,Loaded事件发生在控件呈现后(MSDN).那么在这个事件中有上面的代码是否有意义?如果没有,哪个事件适合它?
此外,RenderMode视觉上的设置会影响它的孩子吗?或者我是否需要为每个子元素专门设置它?
任何帮助都会很棒!
我有一个WPF应用程序,看起来很奇怪.运行一段时间后,UI停止渲染.它根本没有更新,更新的最后一个视图一直显示.鼠标悬停操作不会像通常那样触发复选框和其他项的标记.如果我最小化应用程序并再次恢复它,整个窗口变黑.这不是UI线程被占用的问题,应用程序仍然是响应.例如,如果我右键单击鼠标,则会出现上下文菜单,我可以像往常一样从中选择菜单项.如果该项目显示对话框,则会出现对话框并且表现正常,但底层UI仍未呈现.UI中的所有按钮都是可点击的,即使在UI变黑后它们不可见.将鼠标悬停在附有工具提示的项目上时,弹出工具提示.
当应用程序运行一段时间后,这种情况经常发生.
以前有人见过这种行为吗?什么可以导致它的想法?我该怎么调试呢?我不知道哪里开始.
编辑:当UI冻结时,我运行了Ants Performance Profiler,"%Processor Time"接近 - 有时高于 - 100%.
编辑:事实证明,每次我进入Windows锁定屏幕并再次返回时都会发生这种情况.我不知道为什么会发生这种情况,但它与自定义依赖项属性有关,该属性是为了对SetWindowLong,GetWindowLong和SetWindowPos进行p/invoke调用而实现的.依赖项属性按预期工作,除非从Windows锁定屏幕返回.不使用它是解决问题的"解决方案".