2017-07-27 64 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

谢谢你的信息。所以我会接受你的回答,因为这对我很有价值。 –