2017-02-09 13 views
1

Я создаю приложение UWP для RPi3 с сенсорным экраном. У меня есть текстовое поле, на которое я обращаю внимание на загрузку страницы. Я не хочу терять фокус, если пользователь касается другого элемента управления на странице, за исключением двух конкретных кнопок. Я использую это текстовое поле для ввода сканера.Отключить фокус для управления в UWP

Я попытался отключить различные свойства элементов управления я не хочу, чтобы получить фокус:

AllowFocusOnInteraction="False" IsDoubleTapEnabled="False" IsHitTestVisible="False" IsHoldingEnabled="False" IsRightTapEnabled="False" IsTapEnabled="False" 

Но если нажать любую из этих элементов управления, текстовое поле теряет фокус кадры.

Я также попробовал обработчик событий для textbox_LostFocus, чтобы повторно выделить его, однако это не позволяет пользователю щелкнуть одну из двух кнопок, которые пользователь должен щелкнуть (только те элементы управления, которые должны получать фокус) в качестве события textbox_LostFocus снова срабатывает, чтобы вернуть фокус обратно в текстовое поле до того, как произойдет событие button_Click.

В winform я бы отключил свойство tabstop. Любые идеи для UWP?

Заранее спасибо.

ответ

1

Если вы хотите, чтобы ваш TextBox не потерял фокус, вы должны иметь возможность установить фокус методом Focus в LostFocus мероприятие.

Как вы знаете, если мы установили Focus в событие LostFocus, событие Click не может быть запущено.

Поэтому мы должны иметь возможность добавить if в ваш LostFocus событие, когда пользователь нажимает кнопку, текст может потерять фокус. Для этого мы можем добавить событие PointerEntered и PointerExited из Button. В событии PointerEntered мы можем установить значение setFocus.

Например:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <Button Content="Click" AllowFocusOnInteraction="False" IsDoubleTapEnabled="False" IsHitTestVisible="False" IsHoldingEnabled="False" IsRightTapEnabled="False" IsTapEnabled="False"></Button> 
     <TextBox Name="MyText" Text="Hello" LostFocus="MyText_LostFocus"></TextBox> 
     <Button Name="MyButton" PointerEntered="MyButton_PointerEntered" PointerExited="MyButton_PointerExited" Click="Button_Click" Content="Submit"></Button> 
    </StackPanel> 
</Grid> 

код позади:

private bool setFocus = true; 

private void MyText_LostFocus(object sender, RoutedEventArgs e) 
{ 
    if (setFocus == true) 
    { 
     MyText.Focus(FocusState.Programmatic); 
    } 
} 

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    MyButton.Focus(FocusState.Programmatic); 
} 

private void MyButton_PointerEntered(object sender, PointerRoutedEventArgs e) 
{ 
    setFocus = false; 
} 

private void MyButton_PointerExited(object sender, PointerRoutedEventArgs e) 
{ 
    setFocus = true; 
} 
0

На кнопках вы не хотите сосредоточиться, попробуйте установить свойство IsTabStop ложной

+0

(это свойство также находится в UWP) – PrisonMike

+1

[IsTabStop] (https://docs.microsoft.com/en-us/uwp/api/Windows.UI. Xaml.Controls.Control # Windows_UI_Xaml_Controls_Control_IsTabStop) * "указывает, включен ли элемент управления в навигации по вкладкам." * Другими словами, это контролирует ** навигацию на клавиатуре **. Это не то, о чем идет речь. – IInspectable

+0

О, я думал, что он имел в виду клавиатурный фокус, так как невозможно нажать кнопки, если у них нет фокуса, он также сказал, что в winforms он будет использовать свойство isTabStop, поэтому я просто указываю, что это также доступно в uwp – PrisonMike

1

IsEnabled property делает это. Если вам не нравится внешний вид «greyed out», вы можете изменить шаблон управления.

1

У меня была аналогичная проблема с вашей.

решения в моем случае было установка корневого визуального элемента (ScrollViewer) свойство AllowFocusOnInteraction лжи:

var rootScrollViewer = GetVisualRootElement(); 
rootScrollViewer.AllowFocusOnInteraction = false; 

Моего визуальное дерево выглядит следующим образом: ScrollViewer-> внешних пунктов пропуск> Frame-> MainPage-> StackPanel-> и т. д. ...

Следующий шаг устанавливает AllowFocusOnInteraction в True для элементов управления, которые вы хотите разрешить сфокусироваться на взаимодействии (TextBox, CheckBox и т. д.).

С наилучшими пожеланиями,

Adam