2011-02-10 7 views
3

デスクトップアプリケーションに再利用可能なウィンドウを用意して、別のxamlを潜在的に "注入"させることができます。WPF:汎用ウィンドウを実装する方法は?

たとえば、私はメッセージボックス(ok/cancel/string)を使用したいと思います。それ。私はフォームをホストするために使用されることを希望など

I現在持っている:
MyWindow.xaml/CS(あるウィンドウ)
MyMessageBox.xaml/CS(あるユーザーコントロール)
MyForm.xaml/cs(ユーザーコントロール)

これを実装する最良の方法は何ですか。 MyWindowにContentPresenterを置いて、他のxamlを何らかの形で "注入"するだけですか?ベースウィンドウから何かを継承するには他のコントロールが必要ですか?

私は何をしようとしている最善の方法についていくつかのフィードバックを探しています。ありがとう

答えて

2

簡単なアプローチは、フレーム付きのウィンドウで、必要に応じてそのフレームにページを読み込みます。

+0

フレーム= ContentPresenter? – foreyez

+0

これを(フォーム?)をテンプレートとして実装したい場合は、Frame by ContentPresenterを置き換えることができます。しかし、私はしません。 –

1

私はHenk Holterman's answerに同意します。私はこの種のWPFアプリケーション用の小さな「フレームワーク」を作成しました。私は、コードビハインドのための共通の機能を定義するために 'コンテンツ'ページにインタフェースを使用します。キャプションブロック、閉じるボタンなどを提供するために使用する一般的なページテンプレートがあります。

絶対に必要な場合を除き、私はWPFで視覚的継承を避けたいと思います。

+0

あなたはそのフレームワークをどこかに投稿していますか?または、あなたがこれをどうやって行ったかについてもう少し詳しく説明できますか? – foreyez

+0

はあなたが必要としているものをすでに見つけたようですが、ここに私のコードの肉があります:[link](http://codepaste.net/hz4x3r) –

+0

そのコードを投稿していただきありがとうございます。しかし、私はxamlベースのアプローチ、すなわち .. blabla ..の詳細を探していました。ユーザーコントロールの中にがあります。私はあなたのコードは直接メソッドを呼び出す必要があると思う – foreyez

0

Catelのデータウィンドウはこれを正確に行います。あなたはここにソースコードを見つけることができます。

DataWindow.cs

+0

それは商業ではない場合でも、おそらく(1)のCatelの著者であることを言及する必要があります。 –

+0

それは素晴らしいですが、そのデータウィンドウの外観をどこで定義しますか?それはすべての機能を持っているようですが、私はそれにはxamlが表示されません – foreyez

0

あなたが真剣にこのために(Patterns & Practicesグループから出てくる、マイクロソフトによって開発された)Prismを使用することを検討すべきです。これらのシナリオを正確に処理し、composing UIsのツールを提供するように構築されました。

+0

私はむしろライブラリのその獣をとても単純なものに使用したくないでしょう – foreyez

+0

@foreyez:十分に公正ですが、あなたが持っているものを見てみましょうUIインスタンスを注入して構成します。それはプリズムがすることなのです。また、将来複雑になる可能性のあるシナリオを検討してください。あなたはすでに開発された何かをするためにますます多くのコードを書くことになります。 – casperOne

関連する問題