我一直在寻找并找到:How to simulate the user click on a column header of a datagrid in WPF?,但我不知道我必须放入什么" your_control",我使用的是Silverlight 5,有人可以提供帮助我吗?
DataGridColumnHeaderItemAutomationPeer peer = new DataGridColumnHeaderItemAutomationPeer (Your_control);
我的DataGrid是dgEmployee
当我尝试使用它时,定义它:
DataGridColumnHeaderItemAutomationPeer peer = new DataGridColumnHeaderItemAutomationPeer (dgEmployee);
系统发给我一个错误:
"最好的重载方法匹配' System.Windows.Automation.Peers.DataGridColumnHeaderAutomationPeer.DataGridColu mnHeaderAutomationPeer(System.Windows.Controls.Primitives.DataGridColumnHeader)'有一些无效的论据"
如何将dgEmployee的DataGridColumnHeader作为参数?
谢谢!
答案 0 :(得分:1)
解决方案是:
System.Windows.Controls.Primitives.DataGridColumnHeader headerObj;
headerObj = GetColumnHeaderFromColumn(myDataGrid, myDataGrid.Columns[1].Header);
System.Windows.Automation.Peers.DataGridColumnHeaderAutomationPeer peer =
new DataGridColumnHeaderAutomationPeer(headerObj);
IInvokeProvider invoker = (IInvokeProvider)peer;
invoker.Invoke(); // Invoke a click programmatically
private System.Windows.Controls.Primitives.DataGridColumnHeader GetColumnHeaderFromColumn(DependencyObject parent, object header)
{
int count = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < count; i++)
{
DependencyObject child = VisualTreeHelper.GetChild(parent, i);
if (child != null)
{
if (child is System.Windows.Controls.Primitives.DataGridColumnHeader)
{
System.Windows.Controls.Primitives.DataGridColumnHeader columnHeader = child as System.Windows.Controls.Primitives.DataGridColumnHeader;
if (header.Equals(columnHeader.Content))
{
return columnHeader;
}
}
else
{
System.Windows.Controls.Primitives.DataGridColumnHeader columnHeader = GetColumnHeaderFromColumn(child, header);
if (null != columnHeader)
{
return columnHeader;
}
}
}
}
return null;
}
也许对某人有帮助,来自墨西哥的问候