我正在为带有touchsreen的RPi3构建一个UWP应用程序。我有一个文本框,我把重点放在页面加载上。如果用户触摸页面上的另一个控件,除了两个特定按钮之外,我不想失去焦点。我正在使用此文本框进行扫描仪输入。
我已经尝试为我不想获得焦点的控件禁用不同的属性:
//Deserialize JSON to your Object
YourObject obj = new JavaScriptSerializer().Deserialize<YourObject>("File Contents");
//Serialize your object to JSON
string sJSON = new JavaScriptSerializer().Serialize(YourObject);
但如果按下任何一个控件,文本框仍然会失去焦点。
我还尝试过textbox_LostFocus的事件处理程序来重新给它焦点,但这会阻止用户点击用户需要点击的2个按钮(唯一应该获得焦点的控件),因为textbox_LostFocus事件会触发再次在CTR_Click事件触发之前将焦点设置回文本框。
在winform中,我会禁用tabstop属性。 UWP的任何想法?
提前致谢。
答案 0 :(得分:2)
IsEnabled
property执行此操作。如果你不喜欢&#34;灰色&#34;看,你可以改变控制模板。
答案 1 :(得分:1)
如果您希望TextBox不会失去焦点,您应该能够通过Focus
事件中的LostFocus
方法设置焦点。
如您所知,如果我们在Focus
事件中设置LostFocus
,则不会触发Click
事件。
因此,我们应该能够在if
事件中添加LostFocus
,当用户点击按钮时,文字可能会失去焦点。为此,我们可以添加PointerEntered
的{{1}}个事件和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>
答案 2 :(得分:1)
我遇到了类似的问题。
我的解决方案是将根视觉元素(ScrollViewer)属性AllowFocusOnInteraction设置为false:
var rootScrollViewer = GetVisualRootElement();
rootScrollViewer.AllowFocusOnInteraction = false;
我的可视化树看起来像这样:ScrollViewer-&gt; Border-&gt; Frame-&gt; MainPage-&gt; StackPanel-&gt;等......
下一步是将AllowFocusOnInteraction设置为True以控制您希望关注交互的控件(TextBox,CheckBox等...)。
致以最诚挚的问候,
亚当
答案 3 :(得分:0)
在您不想关注的按钮上,尝试将IsTabStop
属性设置为false