コメントから理解した後、私の答えがそうでなければコメントセクションを自由に使用できると分かっていれば、私はそれを明確に理解していると思います。あなたは全体userControl
static
作るの代わりにuserControl
のシングルトンの静的インスタンスを作成することができ、右のそれに
取得。たとえば、ユーザーコントロール"UserDataControl"
という名前のコントロールがあるとします。背後にあるコードでの静的変数を宣言します。
public static UserDataControl Instance { get; set; }
、それのコンストラクタは、以下のようなものになります:あなたは同じインスタンスを使用して複数のページにuserControl
を追加したいので、今
public UserDataControl()
{
this.InitializeComponent();
Instance = this;
}
をXAML
でコントロールを追加することはできません。したがって、C#を使用すると、onLoaded
関数でuserControlをグリッドまたはContainer wishに追加します。インスタンスがnullの場合は、初期化している場合ので、チェック:例えばの場合:
Loaded += (s, e) =>
{
if (UserControls.UserDataControl.Instance == null)
UserControls.UserDataControl.Instance = new UserControls.UserDataControl();
rootLayout.Children.Add(UserControls.UserDataControl.Instance);
};
は注意してください:メインページの上にあなたは以下rootLayout
Grid
にコントロールを追加することはonLoaded
イベントのコードです初めてそれはnullになります。今
あなたがElement is already the child of another Element
例外を回避するためにSingleton Instance
を使用しているすべてのページでOnNavigatingFrom
イベントをoverride
確認してナビゲートしながら。
protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
//remove the user control as a child as leaving it as a child will throw you an
//error "No installed components were detected. Element is already the child of another element."
if (rootLayout.Children.Contains(UserControls.UserDataControl.Instance))
rootLayout.Children.Remove(UserControls.UserDataControl.Instance);
base.OnNavigatingFrom(e);
}
それだ:以下、上記の例からのコードです。完全なサンプルコードについては、デモのソースコードを1つのドライブからダウンロードできます。
のGitHub LINK:SharedUserControlSample
かなりわからないが、私はあなたがAutofac' 'のようなDIコンテナを使用することができると思うと登録UserControl'は、単一のインスタンス – Alex
@viscように私は右のそれを取得していた場合は'ことを、あなたにいつでもあなたが望むページからアクセスできるようにしたいと思うベースビューがありますか?それとも、コード内の任意のページやサービスから必要なときにいつでもポップアップできるuserControlを持たせたいのですか?それとも何か他のことですか? –
@AdityaSharma私は、そのタイプのすべてのページに共通のXAMLにUserControlを含むページまたは "ビュー"を持っています。つまり、すべてのページがこのUserControlを持つわけではなく、特定のタイプのものだけである。つまり、私はそのUserControlへのハンドル/インスタンスをすべてのページにわたって一定のままにしたいと思います。したがって、UI要素で操作するスレッドは、同じコントローラを参照できます。オブザーバーのパターンは必要ありません。 – visc