How to programmatically access a datagrid row details control
Okay, I figured out how to get this working I had to tweak the code that is posted in that MSDN article in the original question ....
DataGridRow row = (DataGridRow)(KeywordsGrid.ItemContainerGenerator.ContainerFromItem(KeywordsGrid.SelectedItem));
// Getting the ContentPresenter of the row details
DataGridDetailsPresenter presenter = FindVisualChild<DataGridDetailsPresenter>(row);
// Finding Remove button from the DataTemplate that is set on that ContentPresenter
DataTemplate template = presenter.ContentTemplate;
Button button = (Button)template.FindName("RemoveItemButton", presenter);
KeywordsGrid
is the variable tied to my DataGrid
. Notice in my call to FindVisualChild
, I'm using a DataGridDetailsPresenter
class instead of a ContentPresenter
(this was the key... it forced the FindVisualChild
method to iterate all the way through all the content presenters until I got to the one for the row details).
Use the DataGrid.LoadingRowDetails event! It is much more straight forward.
I found this here: How to change Text of TextBlock which is in DataTemplate of Row Details for each DataGrid Row Details?
Example:
xaml
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<TextBlock x:Name="Test">Test</TextBlock>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
c#
private void dgVehicles_LoadingRowDetails(object sender, DataGridRowDetailsEventArgs e)
{
TextBlock tbTest = e.DetailsElement.FindName("Test") as TextBlock;
if (tbTest != null)
{
tbTest.Text = "Juhuu";
}
}