2009-04-14 6 views
17

J'utilise Microsoft WPF DataGrid. J'ai remarqué un comportement étrange avec DataGridTemplateColumn de WPF DataGrid. Lorsque vous utilisez templateColumn dans la grille et que la colonne modèle contient certains contrôles lorsque vous tabulez dans la colonne précédente, le focus n'est pas automatiquement donné au premier élément déclaré dans la colonne modèle. Le foucs est initialement placé sur la bordure de la colonne de modèle et quand nous tabons d'une fois agin le foyer va à la première colonne. Toute solution de contournement pour ce problème. Comment puis-je définir le focus pour aller le premier élément dans la colonne modèle de la grille de données lorsque je tabule.WPF Datagrid -DataGridTemplateColumn onglet problème de mise au point

+0

D'autres réponses se trouvent sur cette question: http://stackoverflow.com/questions/1104164/wpf-datagridtemplatecolumn- am-i-missing-something – Neil

Répondre

7

Je me suis débarrassé de ce problème en cas de manipulation PrepareCellForEdit de la grille. Voici le code

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

Qu'est-ce que HODataGridHelper? J'ai essayé d'utiliser ce code dans un projet .NET 4, mais il n'a aucune idée de ce qu'est le HODataGridHelper et je ne trouve nulle part ailleurs une fonction GetVisualChild applicable. – Pete

+0

Pete, c'était une classe personnalisée que nous avons créée. Désolé, je n'ai pas accès à ce morceau de code maintenant. C'est une variante de la méthode GetVisualChild du framework: http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.getvisualchild.aspx – Gopinath

+0

Merci beaucoup. J'ai chaluté pendant des heures pour le trouver. – Echilon

2

Il existe une solution utilisant une classe statique et une modification du Xaml pour le contrôle que vous voulez focaliser. "WPF DataGrid: Tabbing from cell to cell does not set focus on control"

+0

Le lien spécifié ne fonctionne pas, quelqu'un pls. fournir un lien mis à jour. – akjoshi

+1

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

5

Nous avons résolu ce problème en modifiant le style sur DataGridCell:

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

Fonctionne parfaitement. Merci! – dontbyteme