WPF датагрид с датчиком в ячейках блокирует клавишу ввода
У меня есть Datepicker/Textblock в Datagrid. Я могу выбрать и ввести дату, однако, клавиша ввода или событие щелчка не вводят дату в сетку данных. Если я нажимаю за пределами сетки данных, он принимает значения даты. Я не совсем понимаю, что происходит. Есть идеи, почему это произойдет? Каково решение?
Вот код, кажется, довольно просто.
<DataGrid x:Name="dgTestingDates" ItemsSource="{Binding TestingDates}" CanUserAddRows="True" AutoGenerateColumns="False" HorizontalAlignment="Left" HorizontalContentAlignment="Stretch" ColumnWidth="*" Margin="21,300,0,0" VerticalAlignment="Top" Height="165" Width="245" >
<DataGrid.Columns>
<DataGridTemplateColumn >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Time,UpdateSourceTrigger=LostFocus}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding Path=Time,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
1 ответ
Это решило мою проблему....
public class CustomDatePicker : DatePicker
{
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
if (Template != null)
{
var box = (TextBox)Template.FindName("PART_TextBox", this);
box.AddHandler(KeyDownEvent, new KeyEventHandler(OnTextBoxKeyDown), true);
}
}
private void OnTextBoxKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
// The DatePicker set this as handled, which breaks the DataGrid commit model.
e.Handled = false;
}
}
}