2016-02-12 76 views
0

我在數據網格中有四列,第四列是模板化的,並且具有始終可編輯的文本框。專注於行選擇上的wpf DataGrid中的特定可編輯數據網格單元格

我想在這裏實現的是,當行選擇更改突出顯示的行的第四個單元格是可編輯的,並且文本框中應該有焦點。

我可以在代碼隱藏或xaml中完成此操作。

這裏是我做的:

<DataGrid Name="MyGrid" SelectionChanged="MyGrid_OnSelectionChanged" AutoGenerateColumns="False"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding Str1}" IsReadOnly="True"/> 
      <DataGridTextColumn Binding="{Binding Str2}" IsReadOnly="True"/> 
      <DataGridTextColumn Binding="{Binding Str3}" IsReadOnly="True"/> 
      <DataGridTemplateColumn > 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBox Text="{Binding Str4}" GotFocus="UIElement_OnGotFocus" > 
          <TextBox.Style > 
           <Style TargetType="TextBox"> 

            <Style.Triggers> 
             <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=DataGridCell,AncestorLevel=1},Path=IsSelected}"> 
              <Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource Self}}"/> 
             </DataTrigger> 
            </Style.Triggers> 
           </Style> 
          </TextBox.Style> 
         </TextBox> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 

private void PopulateDummies() 
    { 
     int i = 0; 
     List<SomeDummy> dummies = new List<SomeDummy>(); 
     while (i < 10) 
     { 
      dummies.Add(new SomeDummy 
      { 
       Str1 = string.Format("Str1:{0}", i), 
       Str2 = string.Format("Str2:{0}", i), 
       Str3 = string.Format("Str3:{0}", i), 
       Str4 = string.Format("Str4:{0}", i) 
      }); 
      i++; 
     } 
     MyGrid.ItemsSource = dummies; 
    } 

    private void MyGrid_OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 

    } 

    private void UIElement_OnGotFocus(object sender, RoutedEventArgs e) 
    { 
     var txtB = sender as TextBox; 
     txtB.Focus(); 
     txtB.SelectAll(); 
    } 

似乎沒有任何工作。不知道是什麼原因。誰能幫

回答

0

聲明

txtB.Focus(); 

由TextEditory控制有效的替換DataGridCell。爲了做到這一點,視圖需要更新,因此需要運行UI界面。 的全選不能運行,直到編輯器創建的,所以運行它作爲一個獨立的調度作業,並替換爲以下:

Application.Current.Dispatcher.BeginInvoke(new Action(() => { 
    txtB.SelectAll(); 
}), DispatcherPriority.Render); 

這將這樣的伎倆,你不需要SelctionChanged事件爲此目的的處理程序。

+0

IT沒有工作:( – WPFKK

+0

這是意想不到的:我創建了一個新的WPF應用程序,將您的代碼放在MainWindow.xaml中,並用我的建議替換了語句txtB.SelectAll()。單擊單元格(在第4列中)設置行選擇,專注於編輯器單元格,現在也選擇了所有文本。也許我不明白你想實現什麼。 –

相關問題