2012-08-02 8 views
3

버튼을 클릭하여 모든 컨트롤 값을 기본값으로 설정하는 데 문제가 있습니다. 스타일이 설정되어있을 때 작동하지 않는 문제.DependencyProperty의 기본값을 얻는 방법

   var metadata = dependencyProperty.DefaultMetadata; 

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

하지만 이것은 실제로 기본 속성입니다 : 예를 들어

나는 코드가있다! 스타일에서 다른 값을 설정할 수 있기 때문에! 제어를 위해 실제로 "기본"proprties를 얻는 방법!? 그래서 WPF는 스타일이 설정되면 값을 반환합니다.

p.s. ClearValue (propertyToClear); 어떤 경우에는 값을 검사해야하기 때문에 사용할 수 없습니다.

+2

"어떤 경우에는 값을 확인해야합니다." 그게 무슨 뜻 이니? 이 경우 속성에는 기본값이 그대로 유지됩니다. –

답변

12

종속성 개체 유형마다 다른 메타 데이터가있을 수 있습니다. 따라서 GetMetadata 오버로드 중 하나를 사용하여 특정 유형의 속성 메타 데이터를 가져와야합니다.

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

물론입니다. 이 말이 맞습니다. 그러나 스타일이 설정된 경우이 값은 잘못됩니다. 스타일은이 메타 데이터 값을 무시할 수 있기 때문입니다. – Evgeny

+1

오른쪽. [GetValue] (http://msdn.microsoft.com/en-us/library/system.windows.dependencyobject.getvalue)로 실제 값을 얻은 다음 [ClearValue] (http://msdn.microsoft. com/en-us/library/system.windows.dependencyobject.clearvalue), "기본값"값에 대해 GetValue를 다시 입력 한 다음 [SetValue]에 의해 실제 값을 다시 설정합니다 (http://msdn.microsoft.com/en-us/). library/system.windows.dependencyobject.setvalue). 복잡하지만 현재 다른 방법을 볼 수 없습니다. – Clemens

+1

[DependencyPropertyHelper.GetValueSource] (http://msdn.microsoft.com/en-us/library/system.windows.dependencypropertyhelper.getvaluesource)도 있지만 여기서 많이 도움이되지 않을까 걱정됩니다. – Clemens

관련 문제