System.Windows.Documents
클래스의 클래스를 사용하여 특정 종속성 속성의 값을 조건부로 설정하는 일부 일반 코드를 작성하려고합니다. 이러한 특성이 주어진 클래스에 존재하는지 여부.종속성 개체가 특정 종속성 속성 (C#/WPF)을 구현하는지 여부를 확인하는 방법
예를 들어, 이하의 방법이 통과 FrameworkContentElement
의 Padding
속성에 임의의 값을 대입하지 FrameworkContentElement
모든 구체적인 구현은 Padding
속성을 가지고, 그러나
void SetElementPadding(FrameworkContentElement element)
{
element.SetValue(Block.PaddingProperty, new Thickness(155d));
}
(Paragraph
는 않지만 Span
가 수행되지 않음) 그래서이 속성을 구현하는 유형에 대해서는 속성 할당이 성공하고 그렇지 않은 경우에는 자동으로 무시 될 것으로 예상됩니다.
그러나 위의 속성 할당은 Padding
속성을 구현하는지 여부에 관계없이 모든 파생물이 FrameworkContentElement
인 경우 성공합니다. 내가 항상 할당 된 값을 다시 읽을 수 있었기 때문에 나는이 가정을한다.
속성 값을 할당하는 방식에 결함이 있다고 가정합니다. 해당 속성을 구현하지 않은 클래스가 특정 종속성 속성 할당을 무시하도록하려면 어떻게해야합니까?
귀하의 조언에 많은 시간을드립니다.
팀
답변 해 주셔서 감사합니다. FrameworkContentElement에서 파생 된 23 가지 유형 중 하나에서 작동 할 수있는 여러 가지 메소드가 있으므로 유형별 코드 (예 : 인스턴스가 블록인지 테스트)를 피하기를 바랬습니다. 이것은 BorderThickness와 같은 속성에서 특히 중요합니다. BorderThickness는 4 가지 유형으로 독립적으로 구현됩니다. 그럼에도 불구하고, 지원되지 않는 속성에 대한 귀하의 관찰은 무시해 주므로 매우 유용합니다. 즉, 내 메서드가 암시 적으로 결과가 결정되도록 최소를 수행 할 수 있음을 의미합니다. 다시 한번 감사드립니다. –
또 다른 접근법은 Reflection을 사용하고'Padding' 또는'BorderThickness' 속성이 존재 하는지를 명시 적으로 확인하는 것입니다. – wpfwannabe