11

2つのWindowsを備えた単純なWPFアプリケーションを作成しました。ユーザーは最初のウィンドウにいくつかの情報を入力し、[OK]をクリックすると2番目のウィンドウに移動します。これは正常に機能していますが、両方のWindowsを1つのウィンドウに統合しようとしているため、コンテンツのみが変更されます。

ウィンドウの内容を変更したときに、このリソース管理を見つけることができました。これは私が求めているもののようです。ただし、ContentPresenterを検索しましたが、その使用方法について多くのヘルプを見つけることができませんでした。たとえば、ContentPresenterを使用する場合、2つのWindowsにある既存のXAML要素をどこに配置しますか?最初のウィンドウはContentPresenterに入ると思いますが、2番目のウィンドウは、スイッチを入れる必要があるときのためにどこかに配置する必要があります。

どんな助けでも素晴らしいでしょう。簡単な実例はさらに良いでしょう。

TIA

4

2 に答える 2

11

AContentPresenterは通常、既存のコントロールのスタイルを変更するときに使用されます。コントロールのコンテンツが配置される場所です。代わりにContentControl、を使用する必要があります。これは、コンテンツ要素を持つ単なるコントロールです。または、ウィンドウのコンテンツを直接設定することもできます。

2つの既存のウィンドウのコンテンツを2つのUserControlに抽出します。次に、コンテンツをホストする新しいウィンドウを作成します。ビジネスロジックに応じて、そのウィンドウのコンテンツ(または追加の「マスター」コンテンツが必要な場合はそのウィンドウのContentControl)をこれら2つのUserControlのいずれかに設定します。

編集:

出発点として。これは完全に機能するコードではなく、開始するためだけのものです。これは悪いアーキテクチャであることに注意してください。これを実行したら、おそらくMVVMまたは同様のアプローチを使用する必要があります。

<Window>
    <ContentControl Name="ContentHolder" />
</Window>

<UserControl x:Class="MyFirstUserControl" /> <!-- Originally the first window -->

<UserControl x:Class="MySecondUserControl" /> <!-- Originally the second window -->

Windowの背後にあるコード:

// Somewhere, ex. in constructor
this.ContentHolder.Content = new MyFirstUserControl;

// Somewhere else, ex. in reaction to user interaction
this.ContentHolder.Content = new MySecondUserControl;
于 2011-05-06T09:39:16.240 に答える
3

コンテンツのスナップインにはContentPresenterを使用しています。ウィンドウに、次のようなものを配置します。

<ContentPresenter Content="{Binding MainContent}" />

ビューモデルには、オブジェクトタイプのMainContentというプロパティがあります。

public object MainContent { get { return (object)GetValue(MainContentProperty); } set { SetValue(MainContentProperty, value); } }
public static readonly DependencyProperty MainContentProperty = DependencyProperty.Register("MainContent", typeof(object), typeof(SomeViewModel), new FrameworkPropertyMetadata(null));

MainContentを設定したものはすべて、ウィンドウに表示されます。

ビューとビューモデルの分離を維持するために、通常、MainContentプロパティを別のビューモデルに設定し、データテンプレートを使用してそのビューモデルをビューにマップします。

<DataTemplate DataType="{x:Type viewmodels:PlanViewModel}">
    <views:PlanView />
</DataTemplate>

そのデータテンプレートを、他のビューモデルからビューへのマッパーの束と一緒にいくつかの中央リソースディクショナリに配置しました。

于 2011-05-06T14:11:06.103 に答える