selecteditems personalizar examples ejemplo columns c# wpf datagrid

c# - personalizar - Evento Keybox de texto que no se activa cuando la tecla de flecha presiona



selecteditems datagrid c# (2)

En lugar de eso use PreviewKeyDown

Tengo una cuadrícula de datos con una columna como DataGridTemplateColumn de la siguiente manera:

<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>

Cuando cambie el valor de la celda, deseo completar algunos elementos en la vista de lista, el evento TextChanged es el siguiente:

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; } }

Cuando el usuario ingresa la tecla de abajo en el teclado quiero enfocarme en la vista de lista, pero no activará el evento de tecla de retroceso cuando presione las teclas Abajo, Atrás, Espacio, etc. Pero otras teclas alfanuméricas funcionan bien. Mi evento de selección es como sigue :

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; } } }

¿Qué hice mal en mi código?


El evento KeyDown no se KeyDown para las claves de navegación que normalmente manejaría WPF, pero el evento PreviewKeyDown está. Debe configurar Handled=True si no desea que WPF también maneje el evento clave.