文本框按键按下时未触发事件
本文关键字:事件 文本 | 更新日期: 2023-09-27 18:32:17
我有一个数据网格,其中一列作为DataGridTemplateColumn,如下所示:
<my:DataGrid Name="dgvSales" RowHeight="23" SelectionUnit="Cell" BeginningEdit="dgvSales_BeginningEdit" AutoGenerateColumns="False" CellEditEnding="dgvSales_CellEditEnding" >
<my:DataGrid.Columns>
<my:DataGridTemplateColumn Header="Product Name" Width="200">
<my:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Product_Name}"></TextBlock>
</DataTemplate>
</my:DataGridTemplateColumn.CellTemplate>
<my:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox x:Name="txtbxProduct" Text="{Binding Product_Name}" TextChanged="txtbxProduct_TextChanged" KeyDown="txtbxProduct_KeyDown"></TextBox>
</DataTemplate>
</my:DataGridTemplateColumn.CellEditingTemplate>
</my:DataGridTemplateColumn>
</my:DataGrid.Columns>
</my:DataGrid>
当单元格值更改时,我想将一些项目填充到列表视图中,TextChanged 事件如下:
private void txtbxProduct_TextChanged(object sender, TextChangedEventArgs e)
{
TextBox tb = (TextBox)sender;
if (tb.Text.Trim() != "")
{
string qry = "select PL.Record_Id as PList_Id,PM.Record_Id as Product_Id,PM.Product_Code,PM.Product_Name,PTM.Product_Type,PL.Purchase_Rate ,PL.Selling_Rate,PL.MRP from dbo.Tbl_Product_Master PM join Tbl_Product_List PL on PL.Product_Id=PM.Record_Id join Tbl_Product_Type_Master PTM on PTM.Record_Id=PM.Product_Category_Id where PL.Batch_Flag=0 and PM.Is_Del='false'and PM.Is_Active='true' and PM.Product_Name like '%" + tb.Text.Trim() + "%' order by PM.Product_Name ";
DataSet ds = ObjCommon.GetObject.ExecuteQuery_Select(Connection.ConnectionString, qry);
if (ds.Tables[0].Rows.Count > 0)
{
lstvwProductCode.ItemsSource = ds.Tables[0].DefaultView;
lstvwProductCode.Visibility = Visibility.Visible;
}
else
{
lstvwProductCode.ItemsSource = null;
lstvwProductCode.Visibility = Visibility.Collapsed;
}
}
else
{
lstvwProductCode.ItemsSource = null;
lstvwProductCode.Visibility = Visibility.Collapsed;
}
}
当用户在键盘上输入向下键时,我想专注于列表视图,但是当我按下向下,返回,空格等键时,它不会触发Keydown事件,但是其他键(如字母数字键)都可以正常工作。我的键控事件如下:
private void txtbxProduct_KeyDown(object sender, KeyEventArgs e)
{
TextBox tb = (TextBox)sender;
if (e.Key == Key.Escape)
{
tb.Clear();
lstvwProductCode.Visibility = Visibility.Collapsed;
tb.Focus();
}
else if (e.Key == Key.Down)
{
if (lstvwProductCode.Items.Count > 0)
{
lstvwProductCode.SelectedIndex = 0;
lstvwProductCode.Focus();
lstvwProductCode.Visibility = Visibility.Visible;
}
}
}
我在代码中做错了什么?
而不是使用PreviewKeyDown
不会
针对通常由 WPF 处理的导航键引发 KeyDown
事件,但PreviewKeyDown
事件会引发。如果不希望 WPF 也处理密钥事件,则应设置Handled=True
。
我遇到了这个问题,PreviewKeyDown 也没有捕获箭头和 Tab 键。我正在从WinForms启动我的WPF窗口。这篇文章帮助了我。准确地说,这句话:ElementHost.EnableModelessKeyboardInterop(myWindow);