1

この WPF アプリケーションを WPF UserControlに変換しようとしているので、ElementHost を介して WinForms アプリケーションで使用できます。私はWPFが初めてで、この試みの前に触れたことさえなかったので、完全に間違った方法で進んでいる可能性があります。

UserControl プロジェクトをコンパイルしましたが、VS で StaticResources に下線が引かれ、「リソース 'x' を解決できませんでした」というメッセージが表示されます。必要な x:Key 要素を含む xaml を 1 レベル上 (UserControl Dijagram.xaml と同じレベル) に移動しようとしましたが、それでも解決できません。

WinForms アプリで、ElementHost タスクでホストされているコンテンツを選択してデザイナーを介して UserControl を追加しようとすると、次のエラーが発生します。

タイプ「DijagramLC.Dijagram」のオブジェクトを作成しようとしてエラーが発生しました。型にデフォルトのコンストラクターがあることを確認してください。

(デフォルトのコンストラクターが存在する場合でも)。

ただし、コードビハインドに追加すると、次のようになります。

wpfUserControl = new Dijagram();
elementHost1.Child = wpfUserControl;
Controls.Add(elementHost1);

コードはコンパイルされますが、次のランタイム エラーがスローされます。行番号 '20' および行位置 '4'. ---> System.Exception: 'MyToolbar' という名前のリソースが見つかりません. リソース名は大文字と小文字を区別します. "

App.xaml の有無にかかわらず、問題のある xaml の ResourceDictionary 要素を追加してみましたが、基本的に、自分が何をしているのかわかりません:)

コードを SkyDrive にアップロードしました。誰かが見て、私が間違っていることを教えてくれたら本当にありがたいです: https://skydrive.live.com/redir.aspx?cid=21be1f8e850e85cc&resid=21BE1F8E850E85CC! 353

このような新しい技術にやみくもに飛びつくのは嫌いですが、今回は選択の余地がなく、私の要件がこの方法で達成可能かどうかを知る必要があります。

4

2 に答える 2

2

ロードされていないリソースディクショナリのリソースを使用しているため、エラーが発生している可能性があります。ホスティングアプリケーションにリソースディクショナリをロードすると、おそらく問題が解決します。

// When hosting a WPF usercontrol inside an element host, 
// application resources are not loaded, so we need to load them manually.
var resources = new ResourceDictionary
{
    Source = new Uri("/UNIT4.MKB.GUI.XAML.Dashboard.Resources;component/resources.xaml", UriKind.Relative)
};


// Check for null reference
if (Application.Current != null)
{
    //Merge the loaded ResourceDictornairy with the dummy application Resources.
    Application.Current.Resources.MergedDictionaries.Add(resources);
}
于 2012-01-16T08:48:11.337 に答える
2

問題は、次のようなデフォルトのコンストラクターが必要なことです。

public CreatedPollsUC()
{
    InitializeComponent();
}

コンストラクターに他のコードがある場合、エラーが発生します。

public CreatedPollsUC()
{
    InitializeComponent();
    // ... more code
}

したがって、コンストラクターでさらにコードを使用する場合は、最初に要素ホストにコントロールを適用する必要があります。次に、コンストラクターを編集できます。

于 2013-03-20T13:26:11.920 に答える