<data:DataGridTemplateColumn Header="Name">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}">
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
<data:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Name}">
</DataTemplate>
</data:DataGridTemplateColumn.CellEditingTemplate>
</data:DataGridTemplateColumn>
Đó là ví dụ rõ ràng về cột Mẫu, phải không? Điều gì có thể sai với điều đó? Vì vậy, đây là điều - khi một người dùng điều hướng thông qua DataGrid với nhấn TAB-key, nó cần phải nhấn TAB hai lần (!) Để có thể chỉnh sửa văn bản trong TextBox. Làm thế nào tôi có thể làm cho nó có thể chỉnh sửa ngay sau khi người dùng nhận được tiêu điểm cột, tôi có nghĩa là ngay cả khi anh ta chỉ bắt đầu gõ?WPF DataGridTemplateColumn. Tui bỏ lỡ điều gì vậy?
Ok. Tôi tìm thấy một cách - thành Grid.KeyUp() tôi đặt vào mã bên dưới:
if (Grid.CurrentColumn.Header.ToString() == "UserName")
{
if (e.Key != Key.Escape)
{
Grid.BeginEdit();
// Simply send another TAB press
if (Keyboard.FocusedElement is Microsoft.Windows.Controls.DataGridCell)
{
var keyEvt = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.Tab) { RoutedEvent = Keyboard.KeyDownEvent };
InputManager.Current.ProcessInput(keyEvt);
}
}
}
một công trình xử, nhưng điều này thực sự là một hack xấu xí ... :(Tôi muốn MS sẽ tìm ra một cách tốt đẹp của cung cấp loại chức năng này – David
Phương pháp FocusManager hoạt động tốt Để có được nội dung được chọn, bạn cũng có thể thêm phương thức lấy tiêu điểm: void riêng StrikeTextBox_GotFocus (đối tượng người gửi, RoutedEventArgs e) { var textBox = (TextBox) sender ; Dispatcher.BeginInvoke (Hành động mới (textBox.SelectAll)); } – Neil