У меня есть DataGrid с некоторыми столбцами. Одним из них является столбец шаблона. Этот TemplateColumn объявлен, как показано ниже:
<DataGridTemplateColumn Header="First Name">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding FirstName}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding FirstName}" Loaded="TextBox_Loaded_1"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
Требования:
Получите текст внутри TextBlock, который находится внутри CellTemplate, универсальным способом.
Что я пробовал:
Когда я нажимаю Enter в ячейке TemplateColumn, я хочу, чтобы текст находился внутри TextBlock. Итак, я использовал событие PreviewKeyDown DataGrid следующим образом:
private void DataGrid_PreviewKeyDown(.............)
{
If(e.Key == Key.Enter)
{
DependencyObject dep = (DependencyObject)e.OriginalSource;
if(dep != null && dep is DataGridCell)
{
var CellTemplate = ((DataGridCell)dep).Content; //gives me ContentPresenter instead of Textblock
if (CellTemplate is TextBlock)
{
if (((TextBlock)CellTemplate).Text.Trim() == "")
{
//Do whatever I want
}
}
}
}
}
Описанный выше код возвращает ContentPresenter вместо TextBlock. Почему это происходит?
Кроме того, содержимое ContentPresenter равно null.
var CellTemplate = ((DataGridCell)dep).Content;
- person Vishal   schedule 14.07.2014