Пропущено обновление поста с ответом ...
Проблема, по-видимому, заключается в том, что для пользовательского столбца сетки данных (он же DataGridTemplateColumn) сетка не имеет возможности узнать точный тип элемента управления для редактирования (который указывается с помощью DataTemplate и может быть любым). Для DataGridTextColumn тип элемента управления редактирования известен, и, следовательно, сетка может найти его и вызвать в нем SelectAll ().
Таким образом, чтобы достичь конечной цели для TemplateColumn, вам необходимо предоставить помощь. Я забыл, как я решил это в первый раз ... но вот кое-что, что я искал - подправил сегодня. Создание пользовательского деривации TemplateColumn с переопределением метода PrepareCellForEdit, как показано ниже (поменяйте местами текстовое поле с точным управлением редактирования).
public class MyCustomDataColumn : DataGridTemplateColumn
{
protected override object PrepareCellForEdit(FrameworkElement editingElement, RoutedEventArgs editingEventArgs)
{
var contentPresenter = editingElement as ContentPresenter;
var editingControl = FindVisualChild<TextBox>(contentPresenter);
if (editingControl == null)
return null;
editingControl.SelectAll();
return null;
}
private static childItem FindVisualChild<childItem>(DependencyObject obj)
}
Вот реализация FindVisualChild .
XAML:
<WPFTestBed:MyCustomDataColumn Header="CustomColumn"
CellTemplate="{StaticResource DefaultTitleTemplate}"
CellEditingTemplate="{StaticResource EditTitleTemplate}"/>
</DataGrid.Columns>
Много кода для досадных несоответствий.