<data:DataGridTemplateColumn Header="Name">
<data:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}">
</DataTemplate>
</data:DataGridTemplateColumn.CellTemplate>
<data:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Name}">
</DataTemplate>
</data:DataGridTemplateColumn.CellEditingTemplate>
</data:DataGridTemplateColumn>
它的模板柱的明顯的例子,是吧?那可能是什麼錯誤? 所以,這裏的東西 - 當用戶瀏覽與按Tab鍵的DataGrid,它需要按下TAB兩次,才能在文本框來編輯文本(!)。一旦用戶獲得專欄專注,我如何才能使其可編輯,我的意思是即使他剛開始打字?WPF DataGridTemplateColumn。我錯過了什麼嗎?
好的。我發現了一個辦法 - 到Grid.KeyUp()我把下面的代碼:
if (Grid.CurrentColumn.Header.ToString() == "UserName")
{
if (e.Key != Key.Escape)
{
Grid.BeginEdit();
// Simply send another TAB press
if (Keyboard.FocusedElement is Microsoft.Windows.Controls.DataGridCell)
{
var keyEvt = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.Tab) { RoutedEvent = Keyboard.KeyDownEvent };
InputManager.Current.ProcessInput(keyEvt);
}
}
}
工作的一種享受,但是這確實是一個醜陋的黑客... :(我希望微軟會發現提供的一個很好的方式這種功能 – David 2011-04-11 15:30:00
FocusManager方法運作良好爲了獲得所選內容,您還可以添加一個獲得的焦點方法: private void StrikeTextBox_GotFocus(object sender,RoutedEventArgs e) var textBox =(TextBox)sender ; Dispatcher.BeginInvoke(new Action(textBox.SelectAll)); } – Neil 2011-11-18 14:18:36