좋아요, 그래서 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 이벤트 출신이를 호출하는 것을 헤더가 생성되었는지 확인합니다.
유용 해 보입니다. 우리는 DataGrid 인스턴스에 대한 참조를 가지고 있는데, 어떻게 FrameWorkElement.GetTemplateChild()를 사용하기 위해 ControlTemplate에 접근 할 수 있습니까? – fuzzyman
음 ... 그 방법이 보호됩니다. – fuzzyman