Hi!
Ich hab ein UserControl mit einem ItemsControl drauf und Haufen TextBlöcke und Kram. Aber nichts, was Keydowns empfängt, also keine Button, Textboxen etc..
Sonst würden ja deren KeyDowns gerouted, aber wie gesagt: hab ich nicht drauf auffm Ucl.
Gibt es irgendeine Möglichkeit das UIElement.KeydownEvent
zu registrieren, oder iwas mit MetaDaten oder wasweißich, dass mein UserControl KeyDownEvents auslöst?
Der frühe Apfel fängt den Wurm.
Hallo, was willst du denn mit den Key-Downs bezwecken ?
Wenn's zum weinen nicht reicht, lach drüber!
ich bastel ein Sudoku, und da soll man mittm Ziffernblock Zahlen in die Zellen eingeben.
Ausserdem zw. den Zellen navigieren.
Auch auch mit Maus Zellen selecten.
Angezeigt wirds mittels eines UniformGrids, was 9 Boxen zeigt, und jede Box zeigt mittels UniformGrid, 9 Zellen.
Der frühe Apfel fängt den Wurm.
Hallo,
versuch mal die Lösung aus WPF: Setting Keyboard Focus in a User Control? (Problems with KeyBinding)
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
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
Der frühe Apfel fängt den Wurm.