2009-08-21 8 views
5

短期的な解決策として、私はWPFアプリケーションにWindowsフォーム 'usercontrol'を詰め込もうとしています。 WPFアプリケーションビューでは、プロジェクトに「カスタムWindowsフォームコントロール」を追加でき、空のカスタムコントロールを作成できますが、追加方法はわかりません。理想的には、コンパイルされたウィンドウフォームのユーザーコントロールから.dllを取り出し、WPFアプリケーションに貼り付ける方法、またはユーザーコントロールをWPFアプリケーションにインポートする方法を知りたいと思っています。あなたは、WindowsフォームアプリケーションのためにできたようカスタムウィンドウフォームコントロールをWPFアプリケーションに配置する方法は?

おかげで、 サム

答えて

7

は、あなたは本当にツールボックスにコントロールとして追加することはできません。あなたが代わりにすべきことは、WPFアプリケーションの内部でユーザーコントロールを "ホスト"することです。

See how to do it on MSDN。ここで

は(あなたが簡単にカスタムコントロールを使用するように変更することができます)マスクされたテキストボックスを使用する方法の例です:

<Window x:Class="Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" 
Title="HostingWfInWpf"> 
<Grid> 
    <WindowsFormsHost> 
     <wf:MaskedTextBox x:Name="mtbDate" Mask="00/00/0000"/> 
    </WindowsFormsHost> 
</Grid> 
</Window> 
+0

私はこのコードを正確に試してみましたが、私が上記の同じエラーがありました。 – Shizam

+0

Referencesフォルダの 'System.Windows.Forms'アセンブリへの参照を追加しましたか? – Kredns

+0

うん、参照フォルダに追加してください。私はいくつかの周りを見渡し、あなたがリンクしたページに戻ってきた、そして、上のページがXAMLの代わりにC#を使ってWFコントロールを追加する方法を示していることがわかりました。私はこれを試してみましたが、WPF Webアプリケーションを実行する際に何らかの理由でXAML経由で動作させることはできませんが、C#で行うことができます。 http://msdn.microsoft.com/en-us/library/ms751761.aspx – Shizam

3

は、あなたのプロジェクトにのSystem.Windows.Formsへの参照とWindowsFormsIntegrationを追加

xmlns:WinForms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" 
xmlns:WindowsFormsIntegration="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration" 

ウィンドウにWindowsフォームホストを配置します。

<WindowsFormsHost Name="wfhDate" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Stretch"> 
       <WinForms:FlowLayoutPanel/> 
    </WindowsFormsHost> 

は今C#コードで

using Forms = System.Windows.Forms; 
......................... 
Forms.FlowLayoutPanel flpPanel = this.wfhDate.Child as Forms.FlowLayoutPanel; 
// Initialize your Forms contol here. 
flpPanel.Controls.Add(yourControl); 
+0

@ルーカス:XAMLを上から正確にコピーして、エラーなしでコンパイルしましたが、XAMLが確実に機能していることを確認したかったので、C#コードをまだ入れていませんでした。 System.Windows.Markup.XamlParseExceptionが処理されていません メッセージ:アセンブリ 'WpfUploaderTwo、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = nullで定義された' Page1 'のインスタンスを作成できません。 '呼び出しの対象によって例外がスローされました。マークアップファイル 'Page1.xaml'の1行目の位置7のエラー。 – Shizam

+0

WindowsFormsHostビットを取り出すとうまくいきます。コードとエラーへのリンク:http://bit.ly/aGqfG – Shizam

+0

ああ、私は 'WPFアプリケーション'ではなく、 'WPF Webアプリケーション'を作成しています。 – Shizam

0

ルーカス答えは正しいですが、私は必要なものを追加したいです。 Webアプリケーションを作成する場合は、セキュリティ設定を完全信頼アプリケーションに変更する必要があります。これを行う前に、WindowsFormsHostコントロールを動作させることができませんでした。

関連する問題