我们使用ContentTemplate在Silverlight DataGrid中具有自定义标头。标头中有一个按钮,需要以编程方式访问该按钮以挂接事件。我们正在使用IronPython,因此我们无法在xaml中静态绑定事件(此外,我们将网格用于许多不同的视图-因此我们会动态生成xaml)。
我们如何访问datagrid列标题内的控件?
最佳答案
好的,所以我通过遍历网格的可视树寻找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事件调用此代码很方便,这可以确保已创建标头。