我们使用ContentTemplate在Silverlight DataGrid中有自定义标头。我们在标题中有一个按钮,需要以编程方式访问该按钮以挂接事件。我们正在使用IronPython,因此我们无法在xaml中静态绑定事件(另外我们将网格用于许多不同的视图 - 因此我们动态生成xaml)。
我们如何才能访问datagrid列标题内的控件?
答案 0 :(得分: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事件,这可确保已创建标头。
答案 1 :(得分:0)
您是否尝试过FrameworkElement.GetTemplateChild()方法?