2012-06-17 314 views

回答

0

你可以簡單地使用這個擴展方法 -

public static DataGridRow GetSelectedRow(this DataGrid grid) 
{ 
    return (DataGridRow)grid.ItemContainerGenerator.ContainerFromItem(grid.SelectedItem); 
} 

,您可以通過現有的行和列的ID(0你的情況)獲得一個DataGrid的細胞:

public static DataGridCell GetCell(this DataGrid grid, DataGridRow row, int column) 
{ 
    if (row != null) 
    { 
     DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(row); 

     if (presenter == null) 
     { 
      grid.ScrollIntoView(row, grid.Columns[column]); 
      presenter = GetVisualChild<DataGridCellsPresenter>(row); 
     } 

     DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column); 
     return cell; 
    } 
    return null; 
} 

檢查此鏈接的詳細信息 - Get WPF DataGrid row and cell

0
var firstSelectedCellContent = this.dataGrid.Columns[0].GetCellContent(this.dataGrid.SelectedItem); 
var firstSelectedCell = firstSelectedCellContent != null ? firstSelectedCellContent.Parent as DataGridCell : null; 

這種方式可以獲取作爲DataGridCell和DataGridCell本身內容的FrameworkElement。

請注意,如果DataGrid有EnableColumnVirtualization = True,那麼您可能會從上面的代碼中獲得空值。

要從數據源獲取實際值,對於特定的DataGridCell稍微複雜一些。沒有一般的方法可以做到這一點,因爲DataGridCell可以由來自後備數據源的多個值(屬性)組成,因此您需要爲特定的DataGridColumn處理這個問題。

相關問題