2011-07-25 1 views
0

フォーク純粋なWPF(コードビハインドなし)を使用してWPFスタイルで「カスタムプロパティ」を作成するにはどうすればよいですか?

私は、チームがC#とXAMLを可能な限り切り離したプロジェクトでUI設計を行っています。

多くの一般的なウィジェット(ボタンなど)といくつかのUserControlsのスタイルを作成する際に問題が発生しています。特に、私はしたくない/知らない/考えたくないコードビハインドを使用する。

私がしたいことは、自分のUserControlsのレイアウトツリーの「深い範囲」にある要素のプロパティを変更できることです。

たとえば、UserControlがBorderであり、StackPanelが含まれていて、カラフルな楕円などが含まれているとします。

私はこのように、このユーザーコントロールをインスタンス化し、楕円の色のみを変更することができるようにしたい:「EllipseColorは」ユーザーコントロールに定義されているいくつかの「カスタム」プロパティになり

<MyUserControl Background="Gray" EllipseColor="LightGreen" />

私はスタイル内でDependencyPropertyを試しましたが、成功していませんでしたが、これを行うには簡単な方法が必要です。

ヘルプ(リンク、コードスニペット)は大歓迎です。

読んでいただきありがとうございます。

+0

私はDependencyPropertyがまさにあなたが望むものだと思っています...もちろん、それを登録するコードを書く必要があります - コードビハインドとしてカウントされますか? DependencyPropertyを使用しようとしたときにどのような問題がありましたか? – IanR

答えて

4

MVVMの "No Code Behind"ルールは、ViewとViewModelを完全に別々に保つためのものであり、DependencyPropertiesなどのビュー固有のコードには使用しないでください。そのような "四角いブロックから家を建てますが、丸い屋根が欲しくて、自分のビルディングブロックを作ることはできません"と言っています。 DependencyPropertiesの全体的なポイントは、ビューに存在しない追加のプロパティを作成することです。

重要な点は、ViewがViewModelを直接参照していない点と、その逆のことです。あなたのケースでは

は、私がEllipseColorのためのあなたのUserControlのための背後にあるコードでのDependencyPropertyを作成、またはUserControlのBackgroundプロパティのようなものを使用して、私の楕円はそれに色を埋める結合するいずれか。

+0

あなたの徹底的な説明をありがとう!私は実際にこれをやろうとしましたが、UserControl自体の色がなくてもUserControlのBackgroundプロパティをEllipseにバインドする方法はありますか? UserControlの背景がすでに別の色に設定されている場合はどうなりますか?確かにn00b、私は知っているが、... – heltonbiker

+0

@heltonBiker色が使用されない、または上書きされることを知っていた場合、私は既存の色プロパティを使用します。たとえば、UserControlの最初の子(Border)が背景色を定義した場合、UserControlのBackgroundColorを覆い隠すので、代わりにEllipse色のプロパティを使用するのが安全です。 – Rachel

関連する問題