2010-10-19 10 views
16

Mam problem z WPFToolkit DataGrid, gdy kolumna jest dostosowana, dostarczając zarówno CellTemplate i CellEditingTemplate. Jeśli spojrzysz poniżej, zobaczysz, że mój szablon do edycji ma jeden numer: CheckBox. Wszystko jest w porządku w sensie funkcjonalnym, ale kiedy F2 jest trafiony, aby edytować komórkę, należy również nacisnąć klawisz TAB, aby uzyskać skupienie CheckBox. Najlepiej byłoby nacisnąć F2 i SPACE, aby przełączyć wartość. Obecnie trzeba trafić F2, TAB, SPACE. Próbowałem ustawić TabIndex bezskutecznie. Kończy mi się pomysł.CellEditingTemplate DataGrid i fokus w trybie edycji

<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> 

Odpowiedz

20

Spróbuj

<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

działa jak czar. Dzięki! – wpfwannabe

+0

Dziękuję milion razy! – Dabblernl

+0

Dobra robota. Chociaż początkowo nie działał, ponieważ pracowałem z właściwością SelectedItem w DataGrid. Usunięto i zmieniono SelectionUnit = "Cell" i działało. – knockando

12

Albo to ...

<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

Można również przenieść go do stylu .. SteffenSH

+0

Dobra robota. Chociaż początkowo nie działał, ponieważ pracowałem z właściwością SelectedItem w DataGrid. Usunięto i zmieniono SelectionUnit = "Cell" i działało. – knockando

+1

Co właściwie robi ta linia '' {Binding RelativeSource = {RelativeSource Self}} "'? – Yola

0

jeśli chcesz ustawić ostrość na edycji i zaznacz tekst podany przez wiążącą spróbować.

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

kod za:

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

    tb.SelectAll(); 
    FocusManager.SetFocusedElement(this, tb); 
} 
Powiązane problemy