問題タブ [regionadapter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wpf - PrismRegionAdapter-ビューの削除と追加
AvalonDockを含むprism/wpf/mefソリューションがあります。RegionAdapterBase<Pane>
AvalonDockからのペインの作成と削除を処理するクラスを作成しました。
これが私が遭遇している問題です:
- メニューのボタンをクリックすると、ビューがリージョンに登録され、
DocumentPane
- AvalonDockの閉じるボタンをクリックしてタブを閉じ、ビューを削除します
- 同じメニューボタンをクリックして、もう一度追加します
- エラーが発生しました:
「指定された要素はすでに別の要素の論理的な子です。最初に切断してください。」
だから...これは私が削除する必要がある何かが残っていることを私に教えてくれますが、それがどこにあるのかわかりません。これが私のRegionAdapterからのコードです:
デバッグ行から、DocumentPane
およびリージョンビューが適切に破棄されています...クリックしてアイテムをビューに追加し直すと、次のような行に上記のエラーメッセージが表示されます。
メニューボタンが押されたときに実行されるモジュールのコードは次のとおりです。
私が欠けているものはありますか?
wpf - WPF、プリズム、MEF。モジュール内にリージョン アダプタを登録しますか?
モジュール内にリージョン アダプタを登録することはできますか?
Shell.xaml に ContentControl をリージョン "MainRegion" に設定しており、現在、AvalonDock コントロールを含むモジュールが取り込まれています。現在、シェル アプリに AvalonDock リージョン アダプターがありますが、それをモジュールに配置してそれ自体を登録したいと考えています。AvalonDock 以外のものを使用することにした場合に、シェル アセンブリを変更する (avalondock リージョン アダプターを削除する) ことなく、別のモジュールを簡単に使用できるように、このプログラムの柔軟性を維持したいと考えています。
このようなことが可能だと思います。誰もこれを以前にやったことがありますか?
現在、ブートストラップでは次のとおりです。
これは、シェル ブートストラップの代わりにモジュールで実行したいことです。
silverlight - Silverlight BusyIndicator コンテンツの無効化
Silverlight ツールキットのビジー インジケーターを使用しています。IsBusy プロパティをビューモデルのプロパティにバインドして、コンテンツを無効にし、BusyIndicator を表示します。また、Prism の RegionManager の TabControlRegionAdapter を使用して、ビューをタブコントロールに挿入しています。
通常はこれで問題なく動作しますが、奇妙なバグに気付きました。シナリオは、あるビューのコンテンツを無効にし、別のタブに切り替え、viewModel で最初のビューの IsBusy を false に設定する eventAggregator を使用してイベントをスローし、最初のタブに戻るというものです。これを行うと、BusyIndicator はなくなりますが、コンテンツは無効のままです。
考え?
devexpress - DevExpress 用のカスタム RegionAdapter を使用した RegionManager の問題
DevExpress リボン用のカスタム リージョン アダプターを作成しました。
シェルの xaml で、リージョンを登録しました
コード ビハインドでは、RegionManager のインスタンスをインポートしています。オンデマンドで、ブートストラッパーがリージョン アダプターを呼び出していますが、RegionManager にリージョンのエントリがありません。私も試しました
しかし、成功せずに。不思議なことに
私には機能しますが、rManager.RequestNavigate は機能しません。
何か案が?
編集
この問題を解決する方法を見つけました。自分の地域を手動で登録する必要があります:
c# - 動的にタブを作成し、そこにビューを挿入します
AvalonDock を使用して vs のようなドッキング スタイルを実現し、prism を使用してアプリケーションにビューを挿入します。
基本的に、ユーザーはサイドにパネルを持ち、ビューごとに 1 つのボタンをロードできます。ボタンを押すたびに、AvalonDock の DocumentPane に新しいタブを作成し、適切なビューを挿入したいと考えています。
このようなシナリオにはプリズムが適しているという印象を受けましたが、わかりません。
また、Markus Raufer による DocumentPane および DockablePane リージョン アダプターに出くわし、プロジェクトに追加して、ブートストラップにマッピングを登録しました。
これにより、ソリューションをコンパイルすることができます (そのため、私は近づいていると推測しています)。
これまでのところ、私はこれを行います:
私Shell
には次のような場所があります:
私のコード ビハインドでは、ブートストラップなどの後、次のような場所があります。
この行を実行してもユーザーには何も表示されませんが、2 回実行すると、ビューが既に登録されているというエラーが発生します (そのため、何かが追加されました!)。
さらに、通常の ContentControl を配置し、それをマークしてprism:RegionManager.RegionName="{x:Static inf:RegionNames.MainTabControlRegion}
から、AvalonDock の DocumentPane に追加するのとまったく同じ方法で UserControl を追加すると、機能します。気紛れ
私は何を間違っていますか?
ありがとう、
バブ。
編集:
MainTabControlRegion をこのように定義すると、最初のビューが実際に追加されます。別のビュー (別の UserControl) を追加すると表示されませんが、WPF インスペクターはそこにあると言います。
私の観点からは、確かに UserControls をリージョンに追加していますが、DocumentPane に追加した UserControl ごとに新しいタブを作成する方法がわかりません。
私はそれについて何も指定していないので、おそらくコードが不足していますか?
ユーザーコントロールを追加してそこに挿入するたびに新しいタブを作成したい。
編集 2: 解決策-->ここ
silverlight - 注文をサポートするカスタム StackPanel Prism RegionAdapter
StackPanel の RegionAdapter の次の実装がありますが、リージョンに関連付けるアイテムの厳密な順序付けが必要です。
リージョンに自分自身を登録するビューがその位置を制御できるようにしたいのですが、おそらく何らかのインデックス番号です
wpf - マルチビュー リージョンの特定のビューに再度移動する
Microsoft Prism フレームワークを利用している WPF アプリケーションに取り組んでいます。アプリケーションの 1 つの側面は、ウィンドウ全体にオーバーレイする任意の数のモーダル ウィンドウを保持できる "モーダル" 領域です。より多くのビューが領域にナビゲートされると、各ウィンドウが右にスライドして、新しいウィンドウが画面の中央を占めるようになります。より視覚的な説明は次のとおりです。
「モーダル」領域に単一のビューが含まれている場合:
別のビューがリージョンに追加されると:
さらにいくつかのビューが追加された場合:
私はこれを、その子のアニメーションと表示を管理するカスタム コントロールを使用して動作させています。コントロールの customRegionAdapter
のAdapt
メソッドは次のようになります。
私の質問は次のとおり です。以前のウィンドウに戻るための最良の方法は何ですか? 現在、RemoveChild
上記のメソッドをトリガーする唯一の方法は、領域からビューを明示的に削除することです。これには、現在領域にあるすべてのビューのリストをどこかに保持する必要があります。
RegionAdapter
理想的には、Prism の「ジャーナリング」の概念を使用して後方にナビゲートできるようにしますが、既にリージョン内にあるビューが再ナビゲートされたときに応答する方法がわかりません。
どんなヒントでも大歓迎です。
編集
GOstrowsky の提案に従うことで、この機能を実現することができました (受け入れられた回答のコメントを参照してください)。リージョン アダプターを変更して、リージョン内のアクティブなビュー (現在画面の中央にあるビュー) を 1 つだけ維持するようにしました。次に、 を介してそのビューを削除対象にできますmyRegion.ActiveViews.FirstOrDefault()
。
まだ別の編集
最後のビューだけでなく、現在リージョンにあるビューを削除する機能が必要だったため、この実装を再度変更しました。詳細については、受け入れられた回答を参照してください。
c# - カスタム リージョン アダプター (PRISM)
このリンクhttp://compositewpf.codeplex.com/discussions/250892で説明されているように、ツールバーのカスタム領域アダプターを実装しました。次のエラーが表示されます:「ToolBarRegionAdapter」には、0 引数を取るコンストラクターが含まれていません。ここに私のコード:
Bootstrapper の ConfigureRegionAdapterMappings() メソッドをオーバーライドしました (Bootstrapper は MefBootstrapper を継承しています)。ここにコード:
コンパイルすると、次のエラーが表示されます。「ToolBarRegionAdapter」には、0 引数を取るコンストラクターが含まれていません。実際には、コンストラクターは IRegionBehaviorFactory を取りますが、コードにそのオブジェクトがありません。しかし、私が見た例では、リージョン アダプタは引数なしでインスタンス化されています。理由はありますか?ありがとう!