2012-08-02 83 views
3

我有问题通过按钮单击默认设置所有控件值。 设置样式时这不起作用的问题。如何获取DependencyProperty的默认值

,比如我有代码:

   var metadata = dependencyProperty.DefaultMetadata; 

       if (value == null) 
       { 
        return metadata.DefaultValue == value; 
       } 
       else 
       { 
        return value.Equals(metadata.DefaultValue); 
       } 

但是这实际上不是默认属性!因为在样式中可以设置其他值! 如何获得真正的“默认”proprities控制!?所以WPF也会从样式返回值,如果这样设置的话?

P.s. ClearValue(propertyToClear);不能使用,因为在某些情况下,我需要检查值。

+2

“在某些情况下,我需要检查值。”你是什​​么意思?该属性在这种情况下仍然是一个值,这是默认值。 – 2012-08-02 07:15:43

回答

12

对于不同的依赖对象类型可能有不同的元数据。因此,您必须通过GetMetadata重载之一获取特定类型的属性元数据。

var metadata = dependencyProperty.GetMetadata(typeof(SomeDependencyObject)); 
var defaultValue = metadata.DefaultValue; 
+0

当然。这是对的。但是如果设置风格,这个值将会是错误的。因为样式可以覆盖此元数据值。 – Evgeny 2012-08-02 06:55:46

+1

对。如何通过[GetValue](http://msdn.microsoft.com/en-us/library/system.windows.dependencyobject.getvalue)获取实际值,然后执行[ClearValue](http://msdn.microsoft.com/)。 com/en-us/library/system.windows.dependencyobject.clearvalue),GetValue再次为“默认”值,然后通过[SetValue]重置实际值(http://msdn.microsoft.com/en-us/库/ system.windows.dependencyobject.setvalue)。复杂,但我目前无法看到另一种方式。 – Clemens 2012-08-02 07:03:06

+1

还有[DependencyPropertyHelper.GetValueSource](http://msdn.microsoft.com/en-us/library/system.windows.dependencypropertyhelper.getvaluesource),但我担心在这里没有多大帮助。 – Clemens 2012-08-02 07:07:38