这是我们所做的:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
if (ForceSoftwareRendering)
{
HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;
HwndTarget hwndTarget = hwndSource.CompositionTarget;
hwndTarget.RenderMode = RenderMode.SoftwareOnly;
}
}
它对我们来说工作正常,除了......这需要为每个窗口完成。在 .NET 3.5 中,无法使设置在应用程序范围内生效。还有一些窗口是您无法控制的——例如,右键单击“上下文”窗口。我们发现 .NET 3.5 除了注册表设置之外没有好的解决方案。
已编辑
这是我们用来确定何时强制软件渲染的逻辑。这是由 Microsoft 支持工程师建议的。
public bool ForceSoftwareRendering
{
get
{
int renderingTier = (System.Windows.Media.RenderCapability.Tier >> 16);
return renderingTier == 0;
}
}
在 .NET 4 中,Microsoft 添加了一个非常适合我们的应用程序范围的设置。这是一个更好的选择,因为您不需要在每个窗口上都设置它。您只需设置一次,它就适用于所有窗口。
System.Windows.Media.RenderOptions.ProcessRenderMode
已编辑
新的 .NET 4.0 属性可以在应用程序启动时设置,如下所示:
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
if (ForceSoftwareRendering)
RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
}
}