2017-07-27 47 views
0

我很好奇是否有任何可能性來區分屬性值是由開發人員在C#/ XAML中定義的,還是具有默認值或計算值。檢查屬性值是否由開發人員定義

Visual Studio在「Live Property Explorer」中提供的內容。

我在看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"/> 

下面的表達式將是真實的:

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

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

這將是真實的:

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

如果將屬性設置爲資源或綁定或其他任何其他local value,則ReadLocalValue還會返回非DependencyProperty.UnsetValue的值。

+0

這很有趣。你碰巧知道對於普通屬性是否有類似的方法? –

+0

我無法想象其中之一。標準.NET屬性沒有不同「價值源」的概念。 – Clemens

+0

謝謝你的信息。所以我會接受你的回答,因爲這對我很有價值。 –

相關問題