代码中的Silverlight DataGrid列标题中的访问控件

时间:2010-03-17 12:29:04

标签: .net silverlight datagrid ironpython header

我们使用ContentTemplate在Silverlight DataGrid中有自定义标头。我们在标题中有一个按钮,需要以编程方式访问该按钮以挂接事件。我们正在使用IronPython,因此我们无法在xaml中静态绑定事件(另外我们将网格用于许多不同的视图 - 因此我们动态生成xaml)。

我们如何才能访问datagrid列标题内的控件?

2 个答案:

答案 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()方法?