OnRender メソッドでカスタム グラフィックスを描画するデコレータを作成しました。グラフィックは、デコレータを含むオブジェクトの位置によって異なります。Style を介して Template プロパティを介してデコレータを設定します。問題は、デコレーターの OnRender メソッドが、テンプレートの適用時に一度だけ呼び出されることです。したがって、オブジェクトの位置を変更してそのオブジェクトで InvalidateVisual() を呼び出すと、デコレータは再レンダリングされません。
オブジェクトのテンプレートを null に設定してから、次のように同じテンプレートにリセットすることで、これを回避できました。
if (myObject.Template != null)
{
ControlTemplate tmpTemplate = myObject.Template;
myObject.Template = null;
myObject.Template = tmpTemplate;
}
これはうまくいきますが、これは行うべき方法ではないと確信しています。私は何が欠けていますか?