private void ClearChangeIndicator() { DataGridAutomationPeer automationPeer = (DataGridAutomationPeer)DataGridAutomationPeer.CreatePeerForElement(NodeMetadataDataGrid); // Get the DataGridRowsPresenterAutomationPeer so we can find the rows in the data grid... DataGridRowsPresenterAutomationPeer dataGridRowsPresenterAutomationPeer = automationPeer.GetChildren(). Where(a => (a is DataGridRowsPresenterAutomationPeer)). Select(a => (a as DataGridRowsPresenterAutomationPeer)). FirstOrDefault(); if (null != dataGridRowsPresenterAutomationPeer) { foreach (var item in dataGridRowsPresenterAutomationPeer.GetChildren()) { // loop to find the DataGridCellAutomationPeer from which we can interrogate the owner -- which is a DataGridRow foreach (var subitem in (item as DataGridItemAutomationPeer).GetChildren()) { if ((subitem is DataGridCellAutomationPeer)) { // At last -- the only public method for finding a row.... DataGridRow row = DataGridRow.GetRowContainingElement(((subitem as DataGridCellAutomationPeer).Owner as FrameworkElement)); row.Foreground = new SolidColorBrush(Colors.Black); } } } } }
public DataGridRow GetDataGridRowByDataContext(DataGrid dataGrid, object dataContext) { if (null != dataContext) { DataGridAutomationPeer automationPeer = (DataGridAutomationPeer)DataGridAutomationPeer.CreatePeerForElement(dataGrid); // Get the DataGridRowsPresenterAutomationPeer so we can find the rows in the data grid... DataGridRowsPresenterAutomationPeer dataGridRowsPresenterAutomationPeer = automationPeer.GetChildren(). Where(a => (a is DataGridRowsPresenterAutomationPeer)). Select(a => (a as DataGridRowsPresenterAutomationPeer)). FirstOrDefault(); if (null != dataGridRowsPresenterAutomationPeer) { foreach (var item in dataGridRowsPresenterAutomationPeer.GetChildren()) { // loop to find the DataGridCellAutomationPeer from which we can interrogate the owner -- which is a DataGridRow foreach (var subitem in (item as DataGridItemAutomationPeer).GetChildren()) { if ((subitem is DataGridCellAutomationPeer)) { // At last -- the only public method for finding a row.... DataGridRow row = DataGridRow.GetRowContainingElement(((subitem as DataGridCellAutomationPeer).Owner as FrameworkElement)); // check this row to see if it is bound to the requested dataContext. if ((row.DataContext) == dataContext) { return(row); } break; // Only need to check one cell in each row } } } } } return(null); }