DataGridTemplateColumn с DatePicker требуется три щелчка для редактирования даты - PullRequest
5 голосов
/ 03 марта 2011

У меня есть DataGridTemplateColumn. Внутри CellEditingTemplate я поместил DatePicker элемент управления. Теперь, если я хочу отредактировать дату, я должен щелкнуть три раза, чтобы позволить DatePicker начать редактирование. Может кто-нибудь сообщить мне, как я могу перевести DatePicker в режим редактирования всего двумя щелчками мыши? Кроме того, если DataGridTemplateColumn сфокусироваться, ввод с клавиатуры не переводит DatePicker также в режим редактирования. Было бы неплохо, если бы это тоже можно было исправить.

Ответы [ 2 ]

9 голосов
/ 03 марта 2011

Вы должны переопределить PrepareCellForEdit в DataGridTemplateColumn следующим образом:

public class DataGridDateColumn:DataGridTemplateColumn
{
    protected override object PrepareCellForEdit(FrameworkElement editingElement,
                                                 RoutedEventArgs editingEventArgs)
    {
        editingElement.MoveFocus(new TraversalRequest(FocusNavigationDirection.First));
        return base.PrepareCellForEdit(editingElement, editingEventArgs);
    } 
}

XAML

<Custom:DataGrid x:Name="dgData" SelectionUnit="Cell" AutoGenerateColumns="False" CanUserAddRows="False">
    <Custom:DataGrid.Columns>
        <Custom:DataGridTextColumn Binding="{Binding Subject}" Header="Subject" Width="*"/>
        <Custom:DataGridTextColumn Binding="{Binding RaisedBy}" Header="Raised By" Width="100"/>

        <DatePickerDGWPF:DataGridDateColumn Header="Raised On" Width="250">
            <DatePickerDGWPF:DataGridDateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding RaisedOn}" />
                </DataTemplate>
            </DatePickerDGWPF:DataGridDateColumn.CellTemplate>
            <DatePickerDGWPF:DataGridDateColumn.CellEditingTemplate>
                <DataTemplate>
                    <Custom:DatePicker SelectedDate="{Binding RaisedOn}"/>       
                </DataTemplate>
            </DatePickerDGWPF:DataGridDateColumn.CellEditingTemplate>
        </DatePickerDGWPF:DataGridDateColumn>
    </Custom:DataGrid.Columns>
</Custom:DataGrid>
0 голосов
/ 20 сентября 2018

Более простым решением было бы окружить DatePicker сеткой и настроить FocusManager на DatePicker….

DataGridTemplateColumn.CellEditingTemplate>
    <DataTemplate>
       <Grid FocusManager.FocusedElement="{Binding ElementName=dPicker}">
           <DatePicker x:Name="dPicker"
                       SelectedDate="{Binding HistoryDate, Mode=TwoWay}"/>
       </Grid>
     </DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
...