WPFは、アプリケーションのコンテンツをカットするWindowsFormHost

質問1: 

  WindowsFormsHostコールWinFromコントロールにWPFを使用する場合は、上位にWindowsFormsHostでWPFコントロールを追加するには、コントロールは表示されません。

 < グリッド> 
    < にWindowsFormsHost 背景= "ホワイト" > 
          < Winfrm:WebブラウザーX:名= "WinFrmWebBrowser" /> 
    </ にWindowsFormsHost > 
    <! - 运行时楕円不会显示出来- > 
    < 楕円の幅= "100" 高さ= "100" 塗りつぶし= "赤" /> 
 </ グリッド>

ソリューション:アッパーパッケージの内容のWPFのポップアップコントロールを使用してください。

< スタイルTargetTypeに= " {X:タイプローカル:MYBROWSER} " > 
    < セッタープロパティ="テンプレート" > 
        < Setter.Value > 
            < たControlTemplate TargetTypeに=」{X:タイプローカル:MYBROWSER} " > 
                < ボーダー背景=" {TemplateBindingの背景} " 
                        BorderBrush =" {TemplateBindingのBorderBrush} " 
                        BorderThickness =" {TemplateBindingのBorderThickness} " >
                    < グリッド> 
                        < ボーダーX:名= "Part_BdrWinfrmHostContainer" > 
                            < にWindowsFormsHost X:名= "Part_WinfrmHost" 背景= "グレー" > 
                                < Winfrm:WEBブラウザX:名= "Part_WinFrmWebBrowser" /> 
                            </ にWindowsFormsHost > 
                        </ ボーダー> 
                        < ポップアップX :名= "PART_Popup" のIsOpen = "True"を配置= "センター"  
                               AllowsTransparency = "真" > 
                            <!- すべてのボーダーの内側WPFコンテンツに追加- > 
                            < ボーダーX:名= "PART_Content" /> 
                        </ ポップアップ> 
                    </ グリッド> 
                </ ボーダー> 
            </ ControlTemplateの> 
        </ Setter.Value > 
    </ セッター> 
</ スタイル>

 私がテストしたときにカスタムCustomControlにパッケージ。定義されたリンクを対応は.csファイルは、コンテンツ依存関係の属性は、2つのパラメータを受け取ります。

< グリッド×:名前= "GdPopupWays" Grid.Column = "1" > 
    < ローカル:MYBROWSER リンク= "http://www.baidu.com" > 
        < ローカル:MyBrowser.Content > 
            <! - ローカル:上層是自定义的ユーザーコントロール- > 
            < ローカル:上層/> 
        </ ローカル:MyBrowser.Content > 
    </ ローカル:MYBROWSER > 
</ グリッド>

このような右サイドとして、私はWindowsFormHostで黄色の楕円重畳成功は、上記の作成しました。(ヒント:私は内部WindowsFormHostでのWinForm WebBrowserコントロールをロード)。

質問2:

作物のコンテンツをロードするWindowsFormHost。

ソリューション:表示エリアの地域特性の制限ののWinFormコントロール。WPFクリップの同等。例としては、次のとおりです:

GraphicsPath path = new GraphicsPath() { FillMode = FillMode.Winding };
path.StartFigure();
path.AddEllipse(new System.Drawing.Rectangle(0, 0, (int)182, (int)182));
path.AddRectangle(new System.Drawing.Rectangle(90, 0, 90, 90));
path.CloseFigure();
this.WinformRtx.Region = new Region(path);

我的测试效果,WPF中用Image加载了一张星空图,右上角放置了WindowsFormHost内容。我对其进行了显示区域限制。

3:问题三

   两个WindowsFormHost叠加时,WindowsFormHost对于png的背景图不支持透明。如下图:

<Grid x:Name="GdMain">
    <Image x:Name="ImgSky" Source="Sky.jpg" Stretch="Fill"/>

    <!--加载Winform的WebBrowser-->
    <WindowsFormsHost Background="White">
        <Winfrm:WebBrowser x:Name="WinFrmWebBrowser"/>
    </WindowsFormsHost>

    <WindowsFormsHost Width="182" Height="182" HorizontalAlignment="Right" 
                      x:Name="WinfrmHostOverlayer" VerticalAlignment="Top" 
                      Background="Transparent">
        <Winfrm:Panel x:Name="WinfrmPanel"/>
    </WindowsFormsHost>
</Grid>

可以看到右上角的png边框分明(实时上我放的是一张三个角均为透明的圆形png)。 若对右上角的Winform Panel进行裁剪。

裁剪完后,下面一层的WindowsFormHost也被裁了,露出了我用Image加载的星空底图,如下图:

解决方案:将要加载的Winform控件放在一起,可以是在同一个Winform Panel下面,这时在进行裁剪就不会有问题。

<Grid x:Name="GdMain">
    <Image x:Name="ImgSky" Source="Sky.jpg" Stretch="Fill"/>
    <WindowsFormsHost HorizontalAlignment="Right" 
                      x:Name="WinfrmHostOverlayer" VerticalAlignment="Top" 
                      Background="Transparent">
        <Winfrm:Panel x:Name="WinfrmPanel">
            <!--<Winfrm:WebBrowser x:Name="WinFrmWebBrowser"/>-->
            <!--<Winfrm:Panel x:Name="WinFrmSubPanel"/>-->
        </ Winfrm:パネル> 
    </ にWindowsFormsHost > 
</ グリッド>

 私は上記のWebブラウザーにロードされているwww.baidu.comです。次の図のデモに示すように、効果を強調するためにテンセントEメールのホームページをロードされます。

ソースコードのダウンロードリンク:次のFanger魏コードスキャンマイクロ文字の記事の最後にあるリンクを取得します。

                                

おすすめ

転載: www.cnblogs.com/duel/p/11614377.html