WPF 4.5探秘之八 空域问题的解决

原创|其它|编辑:郝浩|2012-08-26 21:23:02.000|阅读 1462 次

概述:WPF 4.5探秘之八 空域问题的解决现在在已经能够在WPF4.0上集成一个Win 32位的组件,即便是在WPF 3.5上,出名的依旧是空域问题。每个渲染技术只属于一个领空,当你在WPF应用程序上放置你的的Win32组件时,他们将表现为输入的黑洞、渲染转换并不会很好的应用上等等问题。

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

    WPF 4.5探秘之八 空域问题的解决现在在已经能够在WPF4.0上集成一个Win 32位的组件,即便是在WPF 3.5上,出名的依旧是空域问题。每个渲染技术只属于一个领空,当你在WPF应用程序上放置你的的Win32组件时,他们将表现为输入的黑洞、渲染转换并不会很好的应用上等等问题。更多WPF4.5探秘系列文章    WPF控件

    WPF的团队用这个4.5版本很好的解决了这些问题。在本篇文章中,将据一个例子来说明这些问题,本文是WPF 4.5的新特性系列的一部分。

不能在WPF4.0做什么?

    在WPF 4.5中,如果你使用hwndhost控件添加一个Win32位的组件到一个WPF应用程序你可能会有以下的一些限制:

  • 只能进行一些有限的调整,因为只有容器(hwndhost)将被调整,而并不包含组件本身。
  • 忘记旋转和扭曲。
  • 对于你的应用程序而言,在托管组件是一个黑洞:总是在顶部(忘记z值!)。
  • 透明度不能应用到一个托管Win32位的控件。
  • VisualBrush不使用Win32位的控件。
  • 等等。

如果当你习惯于WPF,这些实在是烦人,这就是为什么托管一个Win32位的控件到WPF 4.0应用程序,很少有人去做的原因。

在 WPF 4.5里有什么新特性?

    在 WPF 4.5里主要有两个新特性,在HwndHost类里与此相关的的是:IsRedirected和CompositionMode。

    IsRedirected是一个布尔值,可以理解为:“我们是不是在解决空域的问题和在Win32位控件和WPF之间分享屏幕? 你可能想知道我为什么这不是默认设置为true。 我认为它能导致性能问题和一些你需要做的事。”

CompositionMode 是一个枚举,主要是说明了集成的深度问题:

  • None:这是默认行为,并没有进行集成:空域问题依然存在。
  • outputOnly:空域问题被解决了,但是用户不能与托管的Win32位的控件进行交互(输入系统里) 。
  • Full:全空域的问题得到解决和Win32位的组件进行交互也是可能的。

任何渲染进行之前,必须对这两个属性进行设置,否则将抛出一个异常。

WebBrowser控件的一个例子

    你可能知道,WPF WebBrowser实际上是一个伪装成WPF Win32位的一个控件, 这意味着每一个我们前面所见的缺点,会当你在使用应用程序的时候出现。

    现在你可以像一个标准控件使用WPF 4.5,你必须做所有的是设置我们之前见过的两个属性的正确值。

    如果想用透明度为0.6显示一个网页浏览器,并将其缩小到大小为以前的一半,如果想要在它旁边的矩形内显示它的VisualBrus,XAML将需要满足这些条件:

<UniformGrid Columns="2" x:Name="grid">
<WebBrowser x:Name="_webBrowser" Source="http://www.jonathanAntoine.com"
Margin="5" Opacity="0.6">
<WebBrowser.RenderTransform>
<ScaleTransform ScaleX="0.5" ScaleY="0.5" />
</WebBrowser.RenderTransform>
</WebBrowser>
<Rectangle Margin="5">
<Rectangle.Fill>
<VisualBrush Visual="{Binding ElementName=_webBrowser}" />
</Rectangle.Fill>
</Rectangle>
</UniformGrid>

    然后让它运行,我必须激活重定向以及设置HwndHost 里的WebBrowser的组成模式。WPF 团队认为这种用法,可以找到在里面相同的属性,而在窗口构造函数中可以肯定做没有渲染运行:

public MainWindow()
{
InitializeComponent();

_webBrowser.CompositionMode = System.Windows.Interop.CompositionMode.Full;
_webBrowser.IsRedirected = true;
}

    以上就是在WPF 4.0和4.5对于渲染的比较。 


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:外文翻译

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP