HASTCounter:3356Today:2Yesterday:0Online:7TweetプロパティとDesigner(デザイナ)へのフィードバックデザイナ上へプロパティの値が反映されない問題WPFでカスタムユーザーインターフェースなどを作る場合に、外観に関わる任意のプロパティを設けることは良くあります。ところが、プロパティの値を変更したのにもかかわらずVisualStudio上のDesignerではその外観に変化が現れないことがあります。結論から言うと、ControlTemplateなどと結びつけるようにしてプロパティを設定することでデザイナ上でも外観のフィードバックが得られるようになりそうです(未検証)。記事の内容に誤りないし、改善すべき内容があります。MSDNDependencyPropertyとBindableAttributeの使い方プロパティの値が代入されるタイミングXAMLやプロパティウィンドウから設定したプロパティの値が代入されるタイミングは、Intializedが実行された後のタイミングです。試しにコンストラクタ上で値を検知して見ればわかると思いますが、プロパティの値には初期値が与えられていると思います。試しにプロパティ"EllipseColor"なるものを用意しました。UserControl中のEllipseのStrokeとFillを設定するためのプロパティです。次のソースコードのようにコンストラクタとOnInitializedメソッドで値を確認します。結果は両方ともnullとなります。これが依存プロパティである場合、さらに初期値が与えられている場合には、プロパティの値は設定された初期値となります(初期値がnullならnullが返りますが)。}VisualStudio-WPFのデザイナは、Initializedまでに実行される内容について画面上に表示するようですが、OnInitialized時点ではプロパティの値が初期値であるために、プロパティを設定しても画面上に反映されない、という現象が起きるわけです。念のために書いておきますが、実行時にはきちんとプロパティの値は反映されます。先にも少し書きましたが、ControlTemplateなどと関連する依存プロパティとすれば動作すると思われます。これについては現在未検証です。試しに次のようにしてみました。この方法はとりあえず既存のUIを複数組み合わせたようなカスタムコントロールである場合には有効な手段のひとつかもしれません。先と同じパターンです。Ellipseに与えられているStrokeとFillプロパティを取得・設定するような構造にしてXAMLから値を設定したところ、デザイナ上でも適切に値の変更が反映されました。このことからTemplateの値を変更することが有効ではないか、と考えるに至ったわけです。著作権Administrator。