Saya memiliki DataGrid dengan beberapa kolom. Salah satunya adalah Kolom Template. TemplateColumn tersebut dideklarasikan seperti gambar di bawah ini:
<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>
Persyaratan :
Dapatkan teks di dalam TextBlock yang berada di dalam CellTemplate dengan cara yang umum.
Apa yang telah saya coba :
Saat saya menekan Enter di sel TemplateColumn, saya ingin Teks di dalam TextBlock. Jadi, saya telah menggunakan Acara PratinjauKeyDown dari DataGrid sebagai berikut:
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
}
}
}
}
}
Kode yang dijelaskan di atas mengembalikan ContentPresenter dan bukan TextBlock. Mengapa ini terjadi?
Selain itu, Konten ContentPresenter adalah null.
var CellTemplate = ((DataGridCell)dep).Content;
- person Vishal   schedule 14.07.2014