0

ElementHost コントロールで WPF プリズム アプリをホストする際に問題があり、助けを求めています。

PRISM アプリは、Silverlight およびスタンドアロン WPF で正常に動作します。

メイン シェルは WinForm の elementHost で正常にセットアップされているようですが、他のビューは「RegisterViewWithRegion」でのみロードされ、「Add,Activate」プロシージャではロードされません。スコーピングには「Add,Activate」が必要です。ただし、シェルを 2 回ロードしていることが問題だと思いますが、意図的ではありません。「Resolve」を 2 回呼び出さずに、ブートラッパーを呼び出して elementHot を設定する方法が見つかりません。

これが私の WinForm と私のブートストラッパーのコードです。ここでも、「RegisterViewWithRegion」を使用するとすべてが機能します。

Winform コンストラクターは次のとおりです。

   public Form1()
    {
        InitializeComponent();

        if (System.Windows.Application.Current == null)  
        {
            new MyApp();
        }

        Bootstrapper bootStrapper = new Bootstrapper();
        bootStrapper.Run();

        var shellElement = bootStrapper.Container.Resolve<ShellContainer>();

        //Attach the WPF control to the host  
        elementHost.Child = shellElement;
    }

ブートストラップは次のとおりです。

public class Bootstrapper : UnityBootstrapper
{
    protected override DependencyObject CreateShell()
    {
        return Container.Resolve<ShellContainer>();
    }

    protected override void InitializeModules()
    {
        IModule moduleSurvey = Container.Resolve<SurveyModule>();
        moduleSurvey.Initialize();

    }
}
4

2 に答える 2

0

私は同じGCE(Gross Conceptual Error)を持っていました。Add または Activate を使用すると、ビューが 2 回インスタンス化されるという同じ動作が見られました。それが私を襲ったとき、私は動作のデバッグに深く取り組んでいました。

以下は、ShellContainer の新しいインスタンスを返しています。

var shellElement = bootStrapper.Container.Resolve<ShellContainer>();

ContainerControlledLifetimeManager を使用してコンテナーに ShellContainer タイプを登録するか、ブートストラッパーに prublic プロパティを配置して、ShellContainer インスタンスにアクセスして ElementHost に設定します。

于 2010-07-13T12:48:07.613 に答える
0

Bootstrapper は、Application.Current.MainForm を CreateShell メソッドで返されたものに自動的に設定します。アプリケーションをセットアップしていることを願っています (それが最初の If ブロックで行っていることだと思います)。もしそうなら、これを変更することができます:

var shellElement = bootStrapper.Container.Resolve<ShellContainer>();

これに:

var shellElement = Application.Current.MainForm;

これでうまくいくはずですが、ElementHost には確かにいくつかの奇妙な点があります。特に Citrix 環境で、多くの奇妙なレンダリング バグが発生しました。これがセットアップの制限かどうかはわかりませんが、言及したいと思います。

幸運を!

于 2009-12-21T14:33:21.230 に答える