2010-08-05 3 views
1

우리는 다소 이상한 요구 사항을 가지고 있습니다. WPF-Application의 모든 컨트롤에 대한 가시성은 데이터베이스 테이블에 의해 결정됩니다.WPF : Database/Prerender Hook에서 가시성 제어

즉, 우리는 요소의 이름과 그 가시성을 저장하는 테이블을 가지고 있습니다.

이제 클라이언트 측에서이 기능을 구현하는 우아한 방법을 찾고 있습니다.

나는 내 자신의 UserControl을 만들고 어디서나 그것을 상속 받아 InitializeComponent Template Method를 제공 할 수 있습니다. 하지만 누군가가 프로그래밍 방식으로 더 많은 자식 컨트롤을 추가하면 어떻게 될까요?

나는이 메커니즘에 대해 내 컨트롤에 알리고 싶지 않습니다. 나는 특정 지점 (사전 컨트롤 렌더링)에서 후크/인터셉트를 원하고 데이터베이스에 따라 컨트롤의 가시성을 조정하려고합니다.

어떻게 든 가능합니까? 그리고 그렇지 않다면 어떻게 설계할까요? 그래서 여기

답변

0

내가 무슨 짓을 :

내가 UserControl에서 상속과로드 이벤트에 대한 이벤트 핸들러에 체크하십시오.

그런 다음 내 컨트롤이 내 CustomControl에서 상속 받도록합니다.이 기능은 상당히 잘 작동합니다.

FindName() 구현은 그 이름이 xaml에 정의되어 있더라도 어떤 이유로 든 FrameworkElements를 찾지 못합니다. 그래서 여기에 아이들을 그들의 이름으로 찾는 일상이 있습니다 :

public static T FindVisualChildByName<T>(DependencyObject parent, string name) where T : DependencyObject 
    { 
     for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++) 
     { 
      var child = VisualTreeHelper.GetChild(parent, i); 
      string controlName = child.GetValue(Control.NameProperty) as string; 

      if (controlName == name) 
      { 
       return child as T; 
      } 
      else 
      { 
       T result = FindVisualChildByName<T>(child, name); 
       if (result != null) 
       { 
        return result; 
       } 
      } 
     } 

     return null; 
    } 

나는이 솔루션을 좋아하지 않지만 작동합니다.