PotzBlitz - geht tatsächlich!
Der Fehl-Verständnis war, dass das ucl den Focus nicht automatisch nimmt, wenn man reinklickt. Aber das kann man ja dranprogrammieren:
private void _uclSudoku_MouseDown(object sender, MouseButtonEventArgs e) {
var cll = e.FindParentContext<CellVM>();
SelectedCell = cll;
Keyboard.Focus(_uclSudoku);
}
private void _uclSudoku_KeyDown(object sender, KeyEventArgs e) {
if (_SelectedCell == null) return;
int i = _AllCells.IndexOf(_SelectedCell);
switch (e.Key) {
case Key.Right:
i += 1;
break;
case Key.Left:
i -= 1;
break;
case Key.Up:
i -= 9;
break;
case Key.Down:
i += 9;
break;
default:
return;
}
if (i < 0) i += _AllCells.Length;
else if (i ≥ _AllCells.Length) i -= _AllCells.Length;
SelectedCell = _AllCells[i];
e.Handled = true;
}
Und dann muss man noch beim KeyDown e.Handled setzen, sonst verlässt der Focus evtl. das Control wieder aufgrund eines Left-Tastendrucks