2017-09-13 265 views
0

喜不知道如何把光標DatagridCell內部,選擇所有文字設置光標位置,選擇文本

代碼波紋管將焦點設置在小區,開始編輯。但光標不在單元格內,因此用戶無法開始輸入文字。此外,未選擇,因此用戶必須手動選擇文本,而不是直接替換值。

Mainwindow.xaml.cs:

private void GrdLignes_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     foreach (var c in GrdLignes.SelectedCells) 
     { 
      if (c.Column.Header.ToString() == "Quantité Livrée") 
      { 
       var cellContent = c.Column.GetCellContent(c.Item); 
       if (cellContent != null) 
       { 
        var dc = (DataGridCell)cellContent.Parent; 
        dc.Focus(); 
        dc.IsEditing = true; 
       } 
      } 
     } 
    } 

enter image description here

編輯:我說的光標=閃爍的插入符

回答

2

你需要等待,直到在細胞中TextBlock已被替換爲TextBox

定義一個EditingElementStyle和處理Loaded事件爲TextBox

<DataGrid x:Name="GridLignes" ...> 
    <DataGrid.Resources> 
     <Style x:Key="tbStyle" TargetType="TextBox"> 
      <EventSetter Event="Loaded" Handler="OnLoaded" /> 
     </Style> 
    </DataGrid.Resources> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Quantité Livrée" Binding="{Binding Qty}" EditingElementStyle="{StaticResource tbStyle}" /> 
     ... 
    </DataGrid.Columns> 
</DataGrid> 

private void OnLoaded(object sender, RoutedEventArgs e) 
{ 
    TextBox textBox = sender as TextBox; 
    Keyboard.Focus(textBox); 
    textBox.CaretIndex = textBox.Text.Length; 
    textBox.SelectAll(); 
} 
+0

這是工作!謝謝! – ebelair