2010-03-17 6 views
3

Silverlight DataGrid에는 ContentTemplate을 사용하는 사용자 지정 헤더가 있습니다. 헤더에 버튼이있어 버튼을 프로그래밍 방식으로 액세스하여 이벤트를 연결해야합니다. 우리는 IronPython을 사용하고 있으므로 xaml에서 이벤트를 정적으로 바인딩 할 수 없습니다 (더구나 많은 다른보기에 그리드를 사용하므로 동적으로 xaml을 생성합니다).Silverlight의 액세스 컨트롤 DataGrid 열 머리글 코드

DataGrid 열 머리글 내부의 컨트롤에 액세스하려면 어떻게해야합니까?

답변

2

좋아요, 그래서 DataColumnHeader를 찾고있는 그리드의 시각적 트리를 걷고 그것을 해결했습니다. 그리고 헤더의 트리를 걷고 버튼을 찾았습니다.

시각적 트리를 걷는 코드 :

from System.Windows.Media import VisualTreeHelper 

def findChildren(parent, findType): 
    count = VisualTreeHelper.GetChildrenCount(parent) 
    for i in range(count): 
     child = VisualTreeHelper.GetChild(parent, i) 
     if isinstance(child, findType): 
      yield child 
     else: 
      for entry in findChildren(child, findType): 
       yield entry 

다음과 같이 호출됩니다

from System.Windows.Controls import Button 
from System.Windows.Controls.Primitives import DataGridColumnHeader 

for entry in findChildren(self._gridControl, DataGridColumnHeader): 
    for button in findChildren(entry, Button): 
     button.Click += handler 

참고 편리한 시간,이 코드는 grid.Loaded 이벤트 출신이를 호출하는 것을 헤더가 생성되었는지 확인합니다.

0

FrameworkElement.GetTemplateChild() 방법을 사용해 보셨습니까?

+0

유용 해 보입니다. 우리는 DataGrid 인스턴스에 대한 참조를 가지고 있는데, 어떻게 FrameWorkElement.GetTemplateChild()를 사용하기 위해 ControlTemplate에 접근 할 수 있습니까? – fuzzyman

+0

음 ... 그 방법이 보호됩니다. – fuzzyman