2017-08-06 9 views
-1

私はWPFが新しく、複数のユーザーコントロールを持つウィンドウを表示したかったのです。WPF:ユーザーコントロールをプログラム的に変更する

example.xaml

<DockPanel> 

<Border x:Name ="TopRegion" DockPanel.Dock = "top"> 
    <local:userControl1/> 
</Border> 

<Border x:Name ="leftRegion" DockPanel.Dock = "left"> 
    <local:userControl2/> 
</Border> 

</DockPanel> 

のUserControl1とUserControl2を同じプロジェクト内の他の図です。私はusercontrol1.xamlとusercontrol2.xamlです。

usercontrolusercontrol2からusercontrol3にプログラムで実行する必要があるという問題があります。

これを実現する方法は、example.xaml.csプログラムで行います。

+1

WPFと言うときは、MVVMも言う必要があります。 WPFには、MVVMで最もよく使用されるデータテンプレートとテンプレートセレクタのような非常に強力な機能があります。 –

+0

WPFなどのXAMLベースのAPIでは、プログラマティック手段を介してUIオブジェクトを直接変更したいという瞬間、あなたは十分な文脈を提供していません(つまり、良い詳細[mcve]、サポートの詳細とともに)... –

+0

...あなたが対処しようとしているように見えるシナリオは、それぞれの 'それらのビューモデルクラスに関連付けられたい 'UserControl'をテンプレートに含み、' ViewControl'を使用してビューモデルを提示することで、これらのビューモデルクラスのそれぞれに対して 'DataTemplate'リソースを宣言し、 WPFがビューモデルを右の 'UserControl'に一致させる作業をさせるようにします。次に、表示された 'UserControl'を変更することは、その場所で使用しているビューモデルクラスを変更することです。 –

答えて

1

あなたが背後にあるコードでプログラム的

leftRegion.Child = new userControl3(); 

のような新しい子を設定するには、このBorderを使用することができますので、あなたはすでに、BorderleftRegionを命名。

これは、のBorderのインスタンスを新しいインスタンスuserControl3に置き換えることを意味します。

+0

回答ありがとうございます。データテンプレート、ユーザーコントロール、ユーザーコントロールを動的に変更するためのドキュメントリンクをいくつか教えてください。 –

+0

データテンプレートの簡単な紹介はhttps://wpftutorial.net/DataTemplates.htmlにあり、データテンプレートを動的に変更する方法はhttps://stackoverflow.com/questions/13136816/change-data-template-dynamicallyまたはhttps ://stackoverflow.com/questions/146269/change-wpf-datatemplate-for-listbox-item-if-selected。これは、あなたの問題を解決するための全く異なるアプローチであることに注意してください。 – Fruchtzwerg

-2

これは正当な要求ですが、これはXAMLとデータバインディングのロジックとぶつかりますので、エンドユーザーにとって同じ効果がありますが、XAMLの精神に則った代替方法を提案します。

解決方法は簡単です.XAMLに両方のコントロールを追加し、いずれかのコントロールを表示する必要があるかどうかに基づいてVisibilityを切り替えます。

関連する問題