我使用WPFToolKit DataGrid
來顯示數據;在我的用例Wpf DataGrid的焦點問題
- 用戶點擊一個小區和輸入一個值(I捕獲事件並設置焦點到
TextBox
) - 壓力機輸入
- 值被提交
- 焦點轉移到下一頁細胞
現在,用戶無法進入在TextBox
任何值(在DataGridCell
),除非他點擊單元格。 TextBox
可以是各種控件的一部分(如NumericUpDown
,Calendar
等)。
這種行爲類似於Excel的,但我不能將焦點其他各種包裝用戶控件轉移到底層TextBox
有沒有在DataGridCell
(像DataGridCell
包含MatrixCellContainer
,其中包含MatrixCell
,其中包含UpDown
控制)
任何指針都會非常有幫助。
更新:
我能達到什麼我正在尋找通過處理DataGridCell_Selected
事件是這樣的:
private void DataGridCell_Selected(object sender, RoutedEventArgs e)
{
Microsoft.Windows.Controls.DataGridCell dataGridCell =
sender as Microsoft.Windows.Controls.DataGridCell;
// ToDo: This is a very bad hack;
// should be replaced by some proper technique
if (dataGridCell != null)
{
NumericUpDownBase<int>[] IntUpDownControls =
dataGridCell.GetChildrenOfType<NumericUpDownBase<int>>();
if (IntUpDownControls.Count() != 0)
{
IntUpDownControls[0].Focus();
//Keyboard.Focus(IntUpDownControls[0]);
}
else
{
NumericUpDownBase<double>[] DblUpDownControls =
dataGridCell.GetChildrenOfType<NumericUpDownBase<Double>>();
if (DblUpDownControls.Count() != 0)
{
DblUpDownControls[0].Focus();
//Keyboard.Focus(DblUpDownControls[0]);
}
}
}
}
但我知道,會有更好的方式來實現這一目標!
其實我不是將焦點設置在代碼的任何地方,它的DataGrid的默認行爲將焦點移到Enter鍵上(我不確定)。我也在DataGridCell_Selected事件處理程序中檢查了這一點,併爲單元格實現了IsFocused和IsKeyboardFocused。 – akjoshi