2017-07-27 7 views
0

で定義された場合、プロパティ値をC#/ XAMLで、または、それがデフォルトまたは計算値を持っている場合、開発者によって定義されたかどうかを区別するためのいずれかの可能性がある場合、私は好奇心旺盛です。 「ライブプロパティエクスプローラ」で提供してのVisual Studioの何チェックプロパティの値は、開発者

何か。

私はControl.GetType().GetProperties()を見ていたが、私は、プロパティの値は、開発者かどうかによって定義されていたなら、私に識別するのに役立つ可能性のある特定のプロパティを見つけることができませんでした。

Grid定義の場合、Backgroundプロパティは、Visual Studioのスクリーンショットに表示されるように、ローカルで定義された値と見なされます。

<Grid Background="Red"></Grid> 

enter image description here

+0

これを判断する方法はありません。 –

+1

私はそれを行う唯一の方法はコードを見ることだと思います。 – juharr

+1

"計算値"はどのように定義しますか? –

答えて

0

これは、一般的に達成することは困難です。ただし、WPFでは、依存プロパティがローカル値を持つかどうかを調べる具体的なケースについては、DependencyObject.ReadLocalValueを使用できます。

<Grid x:Name="grid"/> 

では、次の式はtrueになります:

grid.ReadLocalValue(Panel.BackgroundProperty) == DependencyProperty.UnsetValue 

<Grid x:Name="grid" Background="Red"/> 

のために、これは本当のことだろうが:

grid.ReadLocalValue(Panel.BackgroundProperty) == Brushes.Red 

ReadLocalValueは、プロパティがリソース、バインディング、またはその他のlocal valueに設定されている場合は、DependencyProperty.UnsetValue以外の値も返します。

+0

これは非常に興味深いです。通常のプロパティに類似のアプローチがあるかどうかを知っていますか? –

+0

私は想像することはできません。標準の.NETプロパティには、さまざまな「値ソース」という概念はありません。 – Clemens

+0

ありがとうございました。だから私はあなたの答えを受け入れるでしょう。 –

関連する問題