我用 System.Windows.Media.RenderCapability.Tier在我的应用的诊断面板中显示当前的渲染模式。 如果我强制应用程序(3.5sp1)通过以下代码更改渲染模式
HwndSource hwndSource = PresentationSource.FromVisual(visual) as System.Windows.Interop.HwndSource;
HwndTarget hwndTarget = hwndSource.CompositionTarget;
hwndTarget.RenderMode = renderMode;
System.Windows.Media.RenderCapability.TierChanged既不会触发,也不会更改System.Windows.Media.RenderCapability.Tier属性。但是,更改将应用于应用程序。如果我查看Perforator,渲染模式已更改为所需模式。
虽然我在很多地方都发现可以使用System.Windows.Media.RenderCapability.Tier来检测当前的渲染状态(也就是msdn,参见this),但似乎是System.Windows.Media .RenderCapability仅提供有关功能的信息,而不提供有关当前模式的信息。如果我看一下班级的名字,那也是有道理的。
是否有其他来源知道如何呈现实际的wpf内容或我做错了什么?
答案 0 :(得分:2)
只需将RenderCapability.Tier
和HwndTarget.RenderMode
组合在一起,您就会得到您想要的内容:
RenderCapability.Tier会更改并触发TierChanged。
HwndTarget.RenderMode仅由用户代码更改,但在更改时没有通知机制。如果您只在一个地方设置它,您可以从那里简单地通知,否则您可能需要使用计时器定期检查它。
基本上如果HwndTarget.RenderMode == RenderMode.Default和RenderCapability.Tier足够高,你就有硬件加速。