Я не знаю, почему я сталкиваюсь со странной ситуацией в датагриде через день. На этот раз это действительно раздражает. Поэтому я пытался обработать клавишу Enter внутри сетки данных, но, похоже, возникла проблема. Как мы знаем, стандартное поведение клавиши Enter в сетке данных - это перемещение вниз по строке, в то время как я хотел сделать что-то еще, теперь я не знаю почему, но даже если я переопределил это поведение с помощью события keydown, он отказывается это делать.
Вот код xaml:
<DataGrid Grid.Row="1" AutoGenerateColumns="False" x:Name="dataGrid1" VerticalAlignment="Stretch" CanUserReorderColumns="False" GridLinesVisibility="Horizontal" HorizontalGridLinesBrush="White" VerticalGridLinesBrush="White" Background="Transparent" Foreground="White" CanUserResizeRows="False" Margin="8,0,8,48" BorderBrush="White" BorderThickness="2" RowBackground="#FF008284" MinRowHeight="5" FontSize="14" ItemsSource="{Binding }" Grid.RowSpan="2" SelectionMode="Single" SelectionUnit="FullRow" KeyDown="dataGrid1_KeyDown" SelectedIndex="0">
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Stretch"/>
<Setter Property="Background" Value="#FF008284"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="Visibility" Value="Visible"/>
<Setter Property="Height" Value="40"/>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="BorderThickness" Value="1,1,1,1"/>
<Setter Property="BorderBrush" Value="White"/>
</Style>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="BorderThickness" Value="1,0,1,0"/>
<Setter Property="BorderBrush" Value="White" />
<Setter Property="TextBlock.TextAlignment" Value="Center" />
<Setter Property="Height" Value="30"/>
<Setter Property="HorizontalContentAlignment" Value="Right"/>
<Setter Property="TextBlock.FontSize" Value="14" />
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Width="80*" Header="Date" CanUserResize="False" CanUserReorder="False" CanUserSort="False" Binding="{Binding Path= date}" IsReadOnly="True"/>
<DataGridTextColumn Width="80*" Header="Payment" CanUserResize="False" CanUserReorder="False" CanUserSort="False" Binding="{Binding Path= Payment}" FontSize="16" IsReadOnly="True"/>
<DataGridTextColumn Width="80*" Header="Receipt" CanUserResize="False" CanUserReorder="False" CanUserSort="False" Binding="{Binding Path= Receipt}" FontSize="16" IsReadOnly="True"/>
<DataGridTextColumn Width="80*" Header="Balance" CanUserResize="False" CanUserReorder="False" CanUserSort="False" Binding="{Binding Path= Balance}" FontSize="16" IsReadOnly="True"/>
<DataGridTextColumn Width="80*" Header="Debit" CanUserResize="False" CanUserReorder="False" CanUserSort="False" Binding="{Binding Path= Debit}" FontSize="16" IsReadOnly="True"/>
<DataGridTextColumn Width="80*" Header="Credit" CanUserResize="False" CanUserReorder="False" CanUserSort="False" Binding="{Binding Path= Credit}" FontSize="16" IsReadOnly="True" />
</DataGrid.Columns>
</DataGrid>
и вот код, то есть, который должен быть вызван:
private void dataGrid1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
String date = (dataGrid1.Items[(dataGrid1.SelectedIndex-1)] as DailyTransaction).date
EnterTransaction transaction = new EnterTransaction(DateTime.Parse(date));
transaction.ShowDialog();
ListofTransaction.reloadData();
return;
}
else if (e.Key == Key.F2)
{
insertNewRow();
return;
}
else if (e.Key == Key.C)
{
ignoreSundays = true;
insertNewRow();
ignoreSundays = false;
}
else if (e.Key == Key.Escape)
{
this.Close();
}
}
Теперь интересно, что Escape key прекрасно работает в этом сценарии. Я не знаю, в чем здесь проблема, или, может быть, мне не хватает чего-то очень простого ??