2010-12-01 32 views
9

WinFormsアプリケーションのElementHostでホストしようとしているWPFコントロールに問題があります。コントロールは、もともと私が別のテストプロジェクトで開発した見た目のないカスタムコントロールです。これはWPFアプリケーションでした。そこに明らかにうまく動作しますが、私のWinFormsアプリケーションでは、ElementHostが表示される空白の灰色のボックスになります。WPFコントロールがWinFormsアプリケーションのElementHostに表示されない

ここでは、作成移入、および親コントロールにElementHostを追加するための私のC#コードです:

// This is my WPF control 
m_TabHostPanel = new TabHostPanel(); 
m_ElementHost = new ElementHost 
       { 
        Child = m_TabHostPanel, 
        Dock = DockStyle.Top, 
        Height = 34 
       }; 
this.Controls.Add(m_ElementHost); 

、必要に応じて親コントロールは、実行時に追加および削除された他のWinFormsコントロールが含まれています。これらはすべてDockStyle.Fillに設定されたDockで単独でホストされます。このように、私は1つを追加するたびに私はそれが正しくレンダリングすることを確認するにはZオーダーの背面にElementHostを送る:

m_ElementHost.SendToBack(); 

したがって、私は空域の問題に実行していないよ知っている、またはのようなものそれ。

私が不思議をした一つのことはこれです:

<Application x:Class="WpfTestApp.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Application/UserInterface/DataTemplates/TabModelDataTemplate.xaml"/> 
       <ResourceDictionary Source="Application/UserInterface/Styles/HoverablePressableButtonStyle.xaml"/> 
       <ResourceDictionary Source="Application/UserInterface/Styles/MiniControlButtonStyle.xaml"/> 
       <ResourceDictionary Source="Application/UserInterface/Styles/TabCloseButtonStyle.xaml"/> 
       <ResourceDictionary Source="Application/UserInterface/Styles/TabScrollLeftButtonStyle.xaml"/> 
       <ResourceDictionary Source="Application/UserInterface/Styles/TabScrollRightButtonStyle.xaml"/> 
       <ResourceDictionary Source="Application/UserInterface/Styles/TabListDropDownButtonStyle.xaml"/> 
       <ResourceDictionary Source="Application/UserInterface/Styles/TabHostComboBoxStyle.xaml"/> 
       <ResourceDictionary Source="Application/UserInterface/Styles/TabButtonStyle.xaml"/> 
       <ResourceDictionary Source="Application/UserInterface/Styles/TabHostPanelStyle.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

I:元のプロジェクト内のすべての私のlooklessコントロールのスタイルはこのように、App.xamlでアプリケーションのリソースディクショナリにマージされましたApp.xamlをWinFormsプロジェクトに移行しましたが、ビルドアクションはページに設定されています。私はそれをApplicationDefinitionに設定すると、アプリケーションに複数のエントリーポイントがあると言うエラーが出ますが、これは意味がありますが、スタイルなどが拾われているのか疑問です。そうでなければ、私のコントロールがなければならない空白の灰色の四角形が表示されている理由を説明できるかもしれません。 WPFコントロールで見ることができるように、これらのスタイルをWinFormsアプリケーションにどうやって取得するのですか?

これは.NET Fx 3.5でも動作しているはずです。

とにかく、今は困惑していますので、どんな助けもありがとうございます。

多くの感謝!

返信用バート

答えて

10

おかげで、私はあなたが私を誤解するかもしれないと思う:私は、ElementHostにアプリケーション自体を挿入し、そのリソースApplicationオブジェクトに通常あるカスタム要素を、ない使用しようとしています。 Appの背後にあるコードでページ

  • にApp.xamlため

    • 設定ビルドアクション:

      http://drwpf.com/blog/2007/10/05/managing-application-resources-when-wpf-is-hosted/

      ショートバージョン:

      幸い、私は答えを見つけました。 xamlは、InitializeComponent()を呼び出すだけのデフォルトのコンストラクタを作成します。

    • WinFormsアプリケーションが起動すると、Aのインスタンスを作成しますppクラス。

    そして、それはすべてです:私のWPFコントロールが必要です。

    今、私は答えがで、の後にしか見つからないのはなぜですか?StackOverflowに投稿しましたか?

    おかげで再び、

    バート

  • +0

    はどのようにアプリケーションクラスの新しいインスタンスを作成するのですか? – Prof

    +0

    あなたはちょうどそれを新しいことができます。 –