セッターは見た目とはまったく異なります。WPFがそれらをアクティブ化するとき、それらはプロパティの値を厳密に設定しません(名前にもかかわらず)。代わりに、それらは可能な値を提供します。これは、プロパティの実効値に影響を与える場合と影響を与えない場合があります。(優先度の高いプロパティ値ソースが現在アクティブであるかどうかによって異なります。http://msdn.microsoft.com/en-us/library/ms743230.aspxは、プロパティ値が取得できる11の異なる場所を文書化しています。)また、セッターが非アクティブ化されると、彼らはもはやその価値を提供しません。
私がこれに言及する理由は、セッターが実際に「呼び出される」ことがない理由を説明するためです。呼び出しは瞬時に行われます-それは特定の瞬間に起こることです。一方、セッターは一定期間アクティブになります。(つまり、2つの興味深い瞬間があります。アクティブになるポイントと、アクティブでなくなるポイントです。)
したがって、セッターを呼び出す方法を尋ねている場合は、実行しようとしているジョブに適したツールがない可能性があります。発生する可能性のある最も近い方法は、セッターがアクティブになり、必要な期間アクティブのままになることです。
さらに、セッターをアクティブ化しても、そのターゲットプロパティが実際に変更されることは保証されません。これは、他のより優先度の高い値のソースが存在する可能性があるためです。さらに、アクティベーションの意味を明確にするには、セッターがどのように使用されているかを知る必要があります。デフォルトのスタイルのセッターは、アプリケーションで定義されたスタイルのセッターよりも優先度が低くなります。テンプレートのトリガーによってアクティブ化されるセッターよりも優先度が低くなります。
したがって、セッターを分離しても意味がありません。セッターの動作(つまり、セッターがアクティブになったときの動作)は、セッターが表示されるコンテキストによって定義されるためです。
コードから、本当にやりたいことは、セッターのターゲットのローカル値が、a)セッターがアクティブになり、b)セッターが最優先であった場合に、プロパティが取得する値に設定されるように調整することです。そのプロパティで使用可能な値。しかし、それはセッターが実際に行う方法を知っているものではありません。
はい、それは皮肉ですが、セッターは実際にプロパティを設定する方法を知りません。
セッターの値をターゲットプロパティ値にするコードは、実際にはWPFのさまざまな部分(Trigger
およびStyle
クラスなど)に分散されています。WPFに必要な処理を実行させる簡単な方法はありません。これは、WPFを単独で実行する方法がないためです。つまり、WPF独自のセッターの処理は、プロパティシステムの他の多くの側面と混ざり合っています。この方法で解決したいと思っていた問題を解決するために、他の方法を探すことを強くお勧めします。