Я не думаю, что вы могли бы справиться с этим с XAML.По крайней мере, не в здравом уме.
Что вы можете сделать, это прослушать события KeyDown или KeyUp в вашем элементе управления textbox и соответственно переместить фокус.В зависимости от того, хотите ли вы, чтобы точка появлялась или нет, вы можете выбрать, какое из этих событий прослушивать:
- Чтобы точка появилась в первом (исходном) текстовом поле, прослушайте
KeyUp
и перемещайте фокус, когда e.Key == Key.0emPeriod
- Чтобы точка появилась во втором текстовом поле, прослушайте
KeyDown
и переместите фокус, когда e.Key == Key.0emPeriod
- Чтобы не отображать точку на всех , слушайте
KeyDown
и перемещайте фокус при e.Key == Key.0emPeriod
, а также установите e.Handled
на true
после перемещения фокуса (в обработчике событий KeyDown
)
Этот код может перемещать фокус на все, что находится дальше в порядке табуляции:
private void MoveFocus(TextBox from)
{
// Assuming the logical parent is a panel (grid, stackpanel etc.) and
// that the element to move focus to is also in the same panel after
// the current one
// This will break if you have a more complex layout
var panel = from.Parent as Panel;
if (panel == null)
return;
var pos = panel.Children.IndexOf(from);
for (int i = pos + 1; i < panel.Children.Count; i++)
{
UIElement child = panel.Children[i];
if (KeyboardNavigation.GetIsTabStop(child))
{
child.Focus();
break;
}
}
}
, конечно, если вы всегда знаете имя элемента управления для перемещения фокуса, вы можете просто сказать:
myOtherTextBox.Focus();
вместо навигации по дочерней коллекции панели.