<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>
Это яркий пример столбца шаблона, верно? Что может быть не так? Итак, вот что - когда пользователь перемещается по DataGrid с нажатием клавиши TAB, ему нужно дважды нажать клавишу TAB (!), Чтобы иметь возможность редактировать текст в TextBox. Как я мог сделать его редактируемым, как только пользователь получит фокус колонки, я имею в виду, даже если он только начинает печатать?WPF DataGridTemplateColumn. Я что-то упускаю?
Хорошо. Я нашел способ - в Grid.KeyUp() Я поставил код ниже:
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);
}
}
}
работает лакомство, но это действительно некрасиво хак ... :(Я хотел бы MS найти хороший способ предоставления этот вид функциональности – David
метод FocusManager хорошо работает для того, чтобы получить выбранное содержимое, вы можете также добавить получили метод фокуса:. личного недействительного StrikeTextBox_GotFocus (объект отправителя, RoutedEventArgs е) { вара TextBox = (TextBox) отправитель ; Dispatcher.BeginInvoke (новое действие (textBox.SelectAll)); } – Neil