外部で定義された、論理的に排他的な(ビジネス上)アタッチされたプロパティが2つあり、どちらも継承可能です。読んでいるDependencyObjectに最も近い設定に応じて、以下に示すように、ロジックでどちらを使用するかが決まります。
注:継承されていることを知りたくありません。これは、を介して実行できます。どこDependencyPropertyHelper.GetValueSource
から取得したかを知りたいので、優先順位を決定できます。
次のビジュアルツリー階層と添付プロパティについて考えてみます。
Root // <-- AProp1 first set here
Child
GrandChild // <-- AProp2 first set here
GreatGrandChild // <-- AProp1 re-applied here
GreatGreatGrandChild
ルートの場合、AProp1が単独で設定されるため、AProp1を使用します。
子の場合、AProp1は継承されるため、引き続きAProp1を使用します。
GrandChildの場合、AProp2が設定されますが、継承のおかげでAProp1にも値があります。ただし、AProp2はこのオブジェクトに直接設定されているため(つまり、「0」レベルの距離)、AProp1(「2」の距離)では、AProp2がビジネスロジックよりも優先されます。
GreatGrandChildの場合も、AProp1が設定されているため(距離が「0」)、AProp2よりも優先されます(距離が「1」)。
最後に、GreatGreatGrandChildの場合も、AProp1とAProp2の両方が継承によって取得されますが、AProp1は階層(「1」の距離)とAProp2(「2」の距離)の近くに設定されているため、AProp1は使用したいもの。
ソースを見つけることができれば、チェーンを歩いて距離を数えることができます。ソースが必要です。
ノート:
記録としては、はい、両方を同じレベルに設定できます。その場合、AProp2が優先されますが、これはこの質問とは関係ありません。
優先度を上げる方法として同じ値を使用する場合でも、プロパティを再適用することもできます(GreatGrandChildを参照) 。そのため、ソースがどこにあるか/チェックしている要素からどれだけ離れているかを知る必要があります。