2010-10-19 65 views
16

我在WPFToolkit DataGrid有一個問題,當一個列是自定義提供CellTemplateCellEditingTemplate。如果你看下面,你會看到我的編輯模板有一個CheckBox。從功能的角度來看,所有的都很好,但是當擊中F2來編輯單元格時,還必須點擊TAB才能讓CheckBox獲得焦點。理想情況下,您可以按F2和SPACE切換值。目前,必須擊中F2,TAB,SPACE。我試圖設置TabIndex無濟於事。我正在用盡想法。DataGrid的CellEditingTemplate和焦點在編輯模式

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

回答

20

,如果你想設置焦點的編輯,並選擇通過綁定給出試試這個文本試試這個

<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

就像一個魅力。謝謝! – wpfwannabe 2010-10-20 09:27:20

+0

非常感謝! – Dabblernl 2011-04-23 21:27:17

+0

不錯的工作。雖然它最初不起作用,因爲我正在使用DataGrid上的SelectedItem屬性。刪除了那個並且改變了SelectionUnit =「Cell」並且這個工作。 – knockando 2011-07-26 16:22:24

12

或者這...

<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

您也可以將其移動到樣式中。 SteffenSH 2011-07-13 10:52:06

+0

不錯的工作。雖然它最初不起作用,因爲我正在使用DataGrid上的SelectedItem屬性。刪除了那個並且改變了SelectionUnit =「Cell」並且這個工作。 – knockando 2011-07-26 16:22:33

+1

這條線實際做了什麼'「{Binding RelativeSource = {RelativeSource Self}}」'? – Yola 2015-04-02 11:50:54

0

。後面

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

代碼:

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

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