2010-10-19 8 views
16

Ich habe ein Problem mit WPFToolkit DataGrid, wenn eine Spalte angepasst wird, die sowohl CellTemplate als auch liefert. Wenn Sie einen Blick darauf werfen, sehen Sie, dass meine Bearbeitungsvorlage eine einzige CheckBox hat. Alles ist in einem funktionalen Sinn in Ordnung, aber wenn F2 getroffen wird, um die Zelle zu bearbeiten, muss man auch TAB drücken, damit der Fokus auf CheckBox liegt. Im Idealfall würde man F2 und SPACE drücken, um den Wert umzuschalten. Momentan muss man F2, TAB, SPACE drücken. Ich habe versucht, TabIndex vergebens zu setzen. Mir gehen die Ideen aus.DataGrids CellEditingTemplate und Fokus im Bearbeitungsmodus

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

Antwort

20

Versuchen Sie, diese

<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

Arbeiten wie ein Charme. Vielen Dank! – wpfwannabe

+0

Danke eine Million mal! – Dabblernl

+0

Gute Arbeit. Obwohl es anfangs nicht funktionierte, weil ich mit der SelectedItem-Eigenschaft auf dem DataGrid arbeitete. Entfernt das und änderte SelectionUnit = "Cell" und das funktionierte. – knockando

12

Oder diese ...

<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

Sie könnten es möglicherweise auch in einen Stil verschieben. SteffenSH

+0

Gute Arbeit. Obwohl es anfangs nicht funktionierte, weil ich mit der SelectedItem-Eigenschaft auf dem DataGrid arbeitete. Entfernt das und änderte SelectionUnit = "Cell" und das funktionierte. – knockando

+1

Was macht diese Zeile eigentlich? "{Binding RelativeSource = {RelativeSource Self}}"? – Yola

0

, wenn Sie den Fokus auf Bearbeiten und wählen Sie den Text durch eine Bindung dieser Versuch gegeben festlegen möchten.

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

Code hinter:

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

    tb.SelectAll(); 
    FocusManager.SetFocusedElement(this, tb); 
} 
Verwandte Themen