2010-10-19 7 views
16

Ho un problema con WPFToolkit DataGrid quando una colonna è personalizzata fornendo sia CellTemplate e CellEditingTemplate. Se dai un'occhiata sotto, vedrai che il mio modello di modifica ha un singolo CheckBox. Tutto va bene in senso funzionale, ma quando F2 viene colpito per modificare la cella, si deve anche premere TAB in modo che lo CheckBox per ricevere lo stato attivo. Idealmente, si otterrebbe F2 e SPACE per commutare il valore. Attualmente, si deve premere F2, TAB, SPACE. Ho provato a impostare TabIndex inutilmente. Sono a corto di idee.CellEditingTemplate di DataGrid e messa a fuoco in modalità di modifica

<WPFToolkit:DataGridTemplateColumn Header="Turn" 
            MinWidth="60"> 
    <WPFToolkit:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <Image Height="16"> 
       <Image.Style> 
        <Style TargetType="{x:Type Image}"> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding CanTurn}" Value="True"> 
           <Setter Property="Source" Value="/Images/16/Tick.png" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </Image.Style> 
      </Image> 
     </DataTemplate> 
    </WPFToolkit:DataGridTemplateColumn.CellTemplate> 

    <WPFToolkit:DataGridTemplateColumn.CellEditingTemplate> 
     <DataTemplate> 
      <CheckBox IsChecked="{Binding Path=CanTurn}" HorizontalAlignment="Center" HorizontalContentAlignment="Center" /> 
     </DataTemplate> 
    </WPFToolkit:DataGridTemplateColumn.CellEditingTemplate> 
</WPFToolkit:DataGridTemplateColumn> 

risposta

20

Prova questa

<DataGridTemplateColumn.CellEditingTemplate> 
    <DataTemplate> 
     <CheckBox Name="checkbox" IsChecked="{Binding Path=CanTurn}" HorizontalAlignment="Center" HorizontalContentAlignment="Center" /> 
     <DataTemplate.Triggers> 
      <Trigger SourceName="checkbox" Property="IsVisible" Value="True"> 
       <Setter TargetName="checkbox" Property="FocusManager.FocusedElement" Value="{Binding ElementName=checkbox}" /> 
      </Trigger> 
     </DataTemplate.Triggers> 
    </DataTemplate> 
</DataGridTemplateColumn.CellEditingTemplate> 
+0

funziona come un fascino. Grazie! – wpfwannabe

+0

Grazie mille volte! – Dabblernl

+0

Bel lavoro. Anche se inizialmente non funzionava perché stavo lavorando con la proprietà SelectedItem su DataGrid. Rimosso quello e cambiato SelectionUnit = "Cella" e questo ha funzionato. – knockando

12

O questo ...

<DataGridTemplateColumn Header="Long" IsReadOnly="False" Width="100"> 
    <DataGridTemplateColumn.CellEditingTemplate> 
    <DataTemplate> 
     <CheckBox FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}" IsChecked="{Binding Path=CanTurn}" HorizontalAlignment="Center" HorizontalContentAlignment="Center" /> 
    </DataTemplate> 
    </DataGridTemplateColumn.CellEditingTemplate> 
</DataGridTemplateColumn> 
+0

Si potrebbe anche spostarlo in uno stile .. SteffenSH

+0

Bel lavoro. Anche se inizialmente non funzionava perché stavo lavorando con la proprietà SelectedItem su DataGrid. Rimosso quello e cambiato SelectionUnit = "Cella" e questo ha funzionato. – knockando

+1

Cosa fa realmente questa riga '" {Binding RelativeSource = {RelativeSource Self}} "'? – Yola

0

se si desidera impostare la messa a fuoco su Modifica e selezionare il testo dato da una rilegatura provare questo.

codice
<DataGridTemplateColumn.CellEditingTemplate> 
    <DataTemplate> 
     <TextBox Text="{Binding Parameter0, Mode=TwoWay}" Loaded="TbLoaded" /> 
    </DataTemplate> 
</DataGridTemplateColumn.CellEditingTemplate> 

dietro:

private void TbLoaded(object sender, EventArgs e) 
{ 
    TextBox tb = sender as TextBox; 
    if (tb == null) return; 

    tb.SelectAll(); 
    FocusManager.SetFocusedElement(this, tb); 
} 
Problemi correlati