0

PropertyDescriptor의 ShouldSerializeValue 메서드를 사용하여 해당 구성 요소 모델이 속성에 기본값이 있는지 여부를 나타냅니다.Control 클래스는 어떻게 ForeColor, BackColor 및 Font 기본값을 제공합니까?

기본 창-형태 Control 클래스는, 데 ForeColor,의 BackColor 및 글꼴 같은 몇 가지 특성을 가지고 그 부모의 같은 값 기본값,하지만 난 찾을 수있는 TypeDescriptor 또는 이러한 기본 값을 제공 PropertyDescriptor. Control 클래스는 ICustomTypeDescriptor를 구현하지 않으며 TypeDescriptionProviderAttribute를 갖지 않습니다.

Control 클래스는 이러한 속성을 serialize해야하는지 여부를 어떻게 나타 냅니까? 이 속성에 대한 PropertyDescriptors는 어디에서 제공합니까 ??

감사합니다 !!!

답변

2

기본값이 없습니다. 이러한 속성은 "주변"속성입니다. Control 클래스는 속성 할당이 발생했음을 감지합니다. 그런 일이 발생하지 않았다면 부모의 해당 속성을 사용합니다. 좋은 점은 하위 컨트롤이 컨테이너와 동일한 색상과 글꼴을 사용한다는 것입니다.

Control 클래스에는 ShouldSerializeForeColor() 메서드가 있습니다. 내부이며 사용자 코드로 덮어 쓸 수 없습니다. 다른 속성과 동일합니다. Reflector 또는 .NET 참조 소스를 사용하여 살펴보십시오. 이 같은

MSDN Library 문서를 : 자식 컨트롤이 자신이 주변 환경과 같이 나타날 수 있도록

의 Windows Forms 컨트롤 주변 속성을 사용합니다. 주변 속성은 컨트롤 속성입니다. 설정하지 않으면 부모 컨트롤에서 을 검색합니다. 컨트롤에 부모가 이고 속성이 설정되어 있지 않으면 컨트롤은 사이트 속성을 통해 ambient 속성의 값을 확인하려고 시도합니다. 컨트롤이 에 위치하지 않은 경우 사이트에서 주변 속성을 지원하지 않거나 AmbientProperties에 속성이 설정되어 있지 않으면 컨트롤에서 자체 기본 값을 사용합니다. 일반적으로 ambient 속성은 자식 컨트롤과 통신하는 BackColor와 같은 컨트롤의 특성을 나타냅니다. 예를 들어, 버튼은 기본값으로 상위 양식과 동일한 BackColor를 갖습니다. 앰비언트 컨트롤 클래스에서 제공하는 속성에는 Cursor, Font, BackColor, ForeColor 및 RightToLeft가 있습니다.

+0

Yeap !!! 방금 속성을 직렬화해야하는지 아닌지를 확인하기 위해'ShouldSerialize + PropertyName'이라는 메소드가 component-model에 의해 사용되었다는 것을 확인했습니다. 나는 결코 그것을 상상하지 않고 있었다! 감사! –