ฉันมี 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 ยังเป็นโมฆะ
var CellTemplate = ((DataGridCell)dep).Content;
- person Vishal   schedule 14.07.2014