我會回答我自己的評論,也可能幫助其他人。 以下MSDN條目解釋和解決問題: http://social.msdn.microsoft.com/Forums/vstudio/en-US/2cde5655-4b8d-4a12-8365-bb0e4a93546f/activating-input-controls-inside-datagrids-rowdetailstemplate-with-single-click?forum=wpf
的問題是,總是顯示一行細節,首先需要獲得的焦點。 爲了避免這個問題,需要一個DataGrid預覽處理程序:
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}" BasedOn="{StaticResource {x:Type DataGridRow}}">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="SelectRowDetails"/>
</Style>
</DataGrid.RowStyle>
注:我已經擴展它,因爲它破壞了我的自定義DataGridRow風格繼承目前使用的一個。
處理程序本身是
private void SelectRowDetails(object sender, MouseButtonEventArgs e)
{
var row = sender as DataGridRow;
if (row == null)
{
return;
}
row.Focusable = true;
row.Focus();
var focusDirection = FocusNavigationDirection.Next;
var request = new TraversalRequest(focusDirection);
var elementWithFocus = Keyboard.FocusedElement as UIElement;
if (elementWithFocus != null)
{
elementWithFocus.MoveFocus(request);
}
}
這將焦點設置到的行詳細信息的內容,解決了點擊兩次的問題。
注意:這一切都取自MSDN線程,它不是我自己的解決方案。
您的RowDetails DataGrid是否有多行?如果是這樣,你是否有與所有行相同的問題?我懷疑你有這裏相同的問題:http://stackoverflow.com/questions/7415988/wpf-datagrid-issue –
曾嘗試設置「focusEnabled = true」? – code90
@Meleak謝謝你的建議。我的datagrid的確有不止一行。不過,該帖子中的建議似乎無法解決我的問題。 rowdetails會自動展開,並在第一次點擊一個細節時,需要點擊2個點擊包含在其中的按鈕。但是,如果我手動循環詳細信息(關閉並重新顯示它們),則只需點擊一次即可。 – seanzi