I've got a datagrid with some defined columns and then a row details template. How do I access a control in the row details template within the code behind? I've got a button that I want to programmatically enable/disable, but I can't figure out how to get access to it in the code behind. I've seen this on the MSDN:
http://msdn.microsoft.com/en-us/library/bb613579.aspx
but that's just describing a regular data template, so when I tried that it didn't work. My case is a row details data template. Surely someone has written code to access a control within a datagrid row details template that can comment on this (Would be much appreciated).
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).