2012-04-12 7 views
1

Ich habe ein Datagrid, das hauptsächlich aus TemplateColumns besteht. Ich habe das Problem, wo beim Tab durch die Zeile zu gehen scheint, um die Zelle zu gehen, dann der Inhalt innerhalb der Zelle (dh ein Textfeld oder togglebutton). Die ideale Situation besteht darin, dass beim Durchblättern der Spalten der Inhalt im Vordergrund steht und die Zelle übersprungen wird. Ich interpretiere vielleicht falsch, was passiert, aber visuell scheint es so zu sein. Ich habe versucht:DataGrid Tabbing geht von Zelle zu Inhalt

  <DataGridTemplateColumn Header="Group Value" 
            MinWidth="30" 
            Width=".02*"> 
       <DataGridTemplateColumn.CellStyle> 
        <Style TargetType="{x:Type DataGridCell}"> 
         <Setter Property="IsTabStop" 
           Value="False" /> 
        </Style> 
       </DataGridTemplateColumn.CellStyle> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBox Text="{Binding SomeBinding, 
               ValidatesOnDataErrors=True, 
               UpdateSourceTrigger=PropertyChanged}" 
           IsReadOnly="{Binding RelativeSource={RelativeSource FindAncestor, 
               AncestorType={x:Type DataGrid}}, 
               Path=DataContext.IsReadOnly}" 
           Style="{StaticResource TextBoxStyle}" /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

Aber das funktioniert nicht, wie ich es angenommen hätte. Kann mir jemand helfen?

Dank

Antwort

2

Sie sind richtig, es scheint die DataGridTemplateColumn zu konzentrieren, bevor sie in ihr über die Kontrolle konzentriert sich während der Tabulatortaste.

Auf der Suche nach einer Lösung, stieß ich auf diese: http://iyalovoi.wordpress.com/2009/08/21/wpf-datagrid-tabbing-from-cell-to-cell-does-not-set-focus-on-control/

Sie die FocusAttacher an die Steuerung innerhalb der Vorlagenspalte anhängen können, und es wird den Fokus von ihm zu stehlen. Es hat super für mich funktioniert.

+0

Das hat super funktioniert, danke! – Josh

+0

Dadurch kann der Fokus nicht durch Drücken der Tabulatortaste verlassen werden. – Nick

2

Ich habe viele Dinge ausprobiert, die ich in verschiedenen Blogs gefunden habe, aber diese haben nicht funktioniert. Aber dann fand ich eine einfache und effektive Technik, die wie ein Champion arbeitete !!!

Dies benötigt nur 2 Schritte.

1. Hinzufügen Stil in Ihrer Ressource-Datei:

<!-- Cell Editing For DataGrid--> 
<Style x:Key="CellEditingStyle" TargetType="DataGridCell"> 
    <Setter Property="IsTabStop" Value="False" /> 
</Style> 

2. Fügen Sie diese Art in Ihrer Daten Grid:

<DataGridTemplateColumn Header="{DynamicResource grdLoadsPerMonths}" 
         CellStyle="{StaticResource CellEditingStyle}"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBox Text="{Binding Path=LoadsPerMonth, UpdateSourceTrigger=LostFocus}" /> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

das ist es. Dies hat das Problem gelöst. Keine Arbeit mehr, keine weitere Klasse muss hinzugefügt werden.

+0

Es funktionierte wie ein Zauber. – Hukam

+0

Das macht das Problem noch schlimmer. Bevor es zwei Registerkarten brauchte, um den Fokus auf das Steuerelement in der DataGridTemplateColumn zu lenken, überspringt die Registerkarte jetzt vollständig das Steuerelement, so dass es unmöglich ist, das Steuerelement ohne Maus zu verwenden. – Nick

Verwandte Themen