在UWP中禁用焦点以进行控制

时间:2017-02-09 20:27:44

标签: c# raspberry-pi uwp uwp-xaml

我正在为带有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的任何想法?

提前致谢。

4 个答案:

答案 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