2010-11-18 3 views
1

J'ai défini des éléments dans un DataTemplate DataGridTemplateColumn.CellEditing. Je veux que lorsque l'édition de la cellule se charge et affiche le modèle, le focus du clavier devrait être donné à un certain contrôle dans le modèle.Xamly définit le focus du clavier sur un élément de la cellule DataGridTemplateColumn?

Considérons cet exemple, quand vous allez en mode édition, la zone de texte n'est pas clavier concentré:

<Window x:Class="MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
    <DataGrid Name="dg" AutoGenerateColumns="False"> 
     <DataGrid.Columns> 
     <DataGridTemplateColumn Header="Title"> 
      <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Title}"/> 
      </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
      <DataGridTemplateColumn.CellEditingTemplate> 
      <DataTemplate> 
       <TextBox Text="{Binding Title}"/> 
      </DataTemplate> 
      </DataGridTemplateColumn.CellEditingTemplate> 
     </DataGridTemplateColumn> 
     <DataGridTemplateColumn Header="Value"> 
      <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Note}"/> 
      </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
      <DataGridTemplateColumn.CellEditingTemplate> 
      <DataTemplate> 
       <TextBox Text="{Binding Note}"/> 
      </DataTemplate> 
      </DataGridTemplateColumn.CellEditingTemplate> 
     </DataGridTemplateColumn> 
     </DataGrid.Columns>  
    </DataGrid> 
    </Grid> 
</Window> 

Class MainWindow 

    Private Sub Window_Loaded(ByVal sender As Object, 
          ByVal e As RoutedEventArgs) Handles MyBase.Loaded 

    Dim data As New List(Of Item) From 
     {New Item, 
     New Item, 
     New Item} 
    dg.ItemsSource = data 
    End Sub 

End Class 

Public Class Item 
    Private Shared Number As Integer = 0 
    Sub New() 
    Number += 1 
    End Sub 
    Public Property Title = "Title " & Number.ToString 
    Public Property Note = "Note " & Number.ToString 
End Class 

Répondre

7

Eh bien la réponse est en fait simple, les zones de texte ci-dessus doivent être modifiés comme suit:

<TextBox Text="{Binding Title}" 
    FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}"/> 
<TextBox Text="{Binding Note}" 
    FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}"/> 
Questions connexes