2009-04-14 16 views
17

Utilizzo il datagrid Microsoft WPF. Ho notato uno strano comportamento con datagrid DataGridTemplateColumn di WPF. Quando si utilizza templateColumn nella griglia e la colonna del modello contiene alcuni controlli quando si passa dalla colonna precedente, lo stato attivo non viene assegnato automaticamente al primo elemento dichiarato nella colonna del modello. Il foucs è impostato inizialmente sul bordo della colonna del template e quando si passa da una scheda all'altra, lo stato attivo passa alla prima colonna. Qualsiasi soluzione alternativa per questo problema. Come posso impostare lo stato attivo per passare al primo elemento nella colonna del modello del datagrid quando eseguo la disattivazione.WPF Datagrid -DataGridTemplateColumn tab focus issue

+0

Alcuni altri risposte possono essere trovate su questa questione: http://stackoverflow.com/questions/1104164/wpf-datagridtemplatecolumn- am-i-missing-something – Neil

risposta

7

mi sono liberato di questo problema di gestione degli eventi PrepareCellForEdit della griglia. Ecco il codice

void HODataGrid_PreparingCellForEdit(object sender, DataGridPreparingCellForEditEventArgs e) 
{ 
     UIElement inputElement; 
     /// 
     /// Texbox is the first control in my template column 
     /// 
     inputElement = HODataGridHelper.GetVisualChild<TextBox>(e.EditingElement); 
     if (inputElement != null) 
     { 
      Keyboard.Focus(inputElement); 
     } 
} 
+0

Che cos'è HODataGridHelper? Ho provato a utilizzare questo codice in un progetto .NET 4, ma non ha idea di cosa sia HODataGridHelper e non riesco a trovare una funzione GetVisualChild applicabile da nessun'altra parte. – Pete

+0

Pete, quella era una classe personalizzata che abbiamo creato. Mi dispiace, non ho accesso a quel pezzo di codice ora. È una variante del metodo GetVisualChild del framework: http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.getvisualchild.aspx – Gopinath

+0

Grazie mille. Ho trascinato per ore per trovarlo. – Echilon

2

C'è una soluzione che utilizza una classe statica e una modifica all'Xaml per il controllo che si desidera mettere a fuoco. "WPF DataGrid: Tabbing from cell to cell does not set focus on control"

+0

Link specificato non funziona, qualcuno pls. fornire un collegamento aggiornato. – akjoshi

+1

Funziona: http://iyalovoi.wordpress.com/2009/08/21/wpf-datagrid-tabbing-from-cell-to-cell-does-not-set-focus-on-control/ – amaca

5

abbiamo risolto il problema modificando lo stile in DataGridCell:

<Style x:Key="DataGridCellStyle" TargetType="{x:Type DataGridCell}"> 
    <Setter Property="IsTabStop" Value="False"/> 
+0

Funziona perfettamente. Grazie! – dontbyteme

Problemi correlati