原創|其它|編輯:郝浩|2012-08-26 21:23:02.000|閱讀 1490 次
概述: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應用程序你可能會有以下的一些限制:
如果當你習慣于WPF,這些實在是煩人,這就是為什么托管一個Win32位的控件到WPF 4.0應用程序,很少有人去做的原因。
在 WPF 4.5里有什么新特性?
在 WPF 4.5里主要有兩個新特性,在HwndHost類里與此相關的的是:IsRedirected和CompositionMode。
IsRedirected是一個布爾值,可以理解為:“我們是不是在解決空域的問題和在Win32位控件和WPF之間分享屏幕? 你可能想知道我為什么這不是默認設置為true。 我認為它能導致性能問題和一些你需要做的事。”
CompositionMode 是一個枚舉,主要是說明了集成的深度問題:
任何渲染進行之前,必須對這兩個屬性進行設置,否則將拋出一個異常。
WebBrowser控件的一個例子
你可能知道,WPF WebBrowser實際上是一個偽裝成WPF Win32位的一個控件, 這意味著每一個我們前面所見的缺點,會當你在使用應用程序的時候出現。
現在你可以像一個標準控件使用WPF 4.5,你必須做所有的是設置我們之前見過的兩個屬性的正確值。
如果想用透明度為0.6顯示一個網頁瀏覽器,并將其縮小到大小為以前的一半,如果想要在它旁邊的矩形內顯示它的VisualBrus,XAML將需要滿足這些條件:
<UniformGrid Columns="2" x:Name="grid">
<WebBrowser x:Name="_webBrowser" Source="//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@ke049m.cn
文章轉載自:外文翻譯