2011-02-02 14 views
11

現在、WPFに移植するにはあまりにも多くの既存のWinFormアプリケーションがあります。 しかし、私はWinFormでは実現できない、いくらか難しい透明性を持つウィンドウを必要としています(はい、Layerd Windowsを試しましたが、それは無駄です)。WinFormアプリケーションでWPFウィンドウをプログラムで作成する方法

WPFは、私が美しく簡単に必要とする透明性の動作を可能にします。

もちろん私はグーグルではありますが、WinForm内でWPFコントロールを作成する方法についてはヒントしか見つけられませんが、それは必要なものではありません。他のフォームとはまったく独立した別のWPFウィンドウが必要です。

WPFウィンドウは単純なフルスクリーンとボーダーレスのオーバーレイウィンドウになります。ここでは、それぞれが異なる透明度を持つ簡単な図を作成します。

WinFormアプリケーション内でWPFウィンドウを作成するにはどうすればよいですか?

+0

ようなもので、ウィンドウを呼び出すこれに対する私の答えに見てください:http://stackoverflow.com/questions/8311956/open-wpf-window-in-windowsform-app/32691690#32691690 –

答えて

13

プロジェクトに必要なWPF参照を追加し、WPF Window -instanceを作成し、EnableModelessKeyboardInteropと呼び出してウィンドウを表示します。

EnableModelessKeyboardInteropを呼び出すと、WPFウィンドウにWindowsフォームアプリケーションからのキーボード入力が得られることが確認されます。

WPFウィンドウ内から新しいウィンドウを開くと、キーボード入力はこの新しいウィンドウにルーティングされません。これらの新しく作成されたウィンドウEnableModelessKeyboardInteropにも電話する必要があります。

あなたの他の要件には、Window.TopmostWindow.AllowsTransparencyを使用してください。 WindowStyleNoneに設定することを忘れないでください。そうしないと、透過性はサポートされません。

更新
以下の参考文献は、あなたの窓にWPFを使用するために追加すべきアプリケーションを構成する:

  • PresentationCore
  • PresentationFramework
  • System.Xaml
  • WindowsBase
  • WindowsFormsIntegration
+0

@ハラルド:私の答えがあなたを助けてくれたなら、それを受け入れられた答えとしてマークしてください。 – HCL

+0

追加情報のリンクは機能しなくなりました。 –

+0

情報をお寄せいただきありがとうございます – HCL

6

ここに(テスト済みの)解決策があります。このコードは、WinFormまたはWPFアプリケーションで使用できます。 XAMLはまったく必要ありません。

#region WPF 
// include following references: 
// PresentationCore 
// PresentationFramework 
// WindowsBase 

using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Media; 
using System.Windows.Shapes; 
#endregion 


public class WPFWindow : Window 
{ 

    private Canvas canvas = new Canvas(); 

    public WPFWindow() 
    { 
     this.AllowsTransparency = true; 
     this.WindowStyle = WindowStyle.None; 
     this.Background = Brushes.Black; 
     this.Topmost = true; 

     this.Width = 400; 
     this.Height = 300; 
     canvas.Width = this.Width; 
     canvas.Height = this.Height; 
     canvas.Background = Brushes.Black; 
     this.Content = canvas; 
    } 
} 

ウィンドウの背景は完全に透明です。 キャンバス上に描画することができ、各要素には独自の透明性があります(描画に使用するブラシのアルファチャンネルを設定して決定できます)。 は単に

WPFWindow w = new WPFWindow(); 
w.Show(); 
+1

+1 'new SolidColorBrush(Color。FromArgb(0,0,0,0)) 'あなたは' Brushes.Black'を書くことができます –

関連する問題