Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何不将元素集中在应用程序启动上?_C#_.net_Uwp_Uwp Xaml - Fatal编程技术网

C# 如何不将元素集中在应用程序启动上?

C# 如何不将元素集中在应用程序启动上?,c#,.net,uwp,uwp-xaml,C#,.net,Uwp,Uwp Xaml,可能的最简单应用: <Page x:Class="TestApp.MainPage" ...> <Grid> <TextBox /> </Grid> </Page> 问:在应用程序启动时,有没有什么优雅的方法可以防止在文本框中设置光标(焦点) 扩展:我真正的问题是,当文本框接收焦点时,我会打开一个弹出窗口。如果我点击弹出窗口中的某个元素,它应该会关闭,但由于文本框是我页面中第一个可聚

可能的最简单应用:

<Page
    x:Class="TestApp.MainPage"
    ...>
    <Grid>
        <TextBox />
    </Grid>
</Page>

问:在应用程序启动时,有没有什么优雅的方法可以防止在文本框中设置光标(焦点)


扩展:我真正的问题是,当文本框接收焦点时,我会打开一个弹出窗口。如果我点击弹出窗口中的某个元素,它应该会关闭,但由于文本框是我页面中第一个可聚焦的元素,它会自动接收焦点,因此弹出窗口会立即再次打开。我认为问题的核心由上面的示例表示。

焦点由各种属性管理,如
IsTabStop
TabIndex
ishitestvisible
,以及
FocusManager
类。有一个内置的功能,可以在激活窗口后聚焦第一个可聚焦的元素,这种行为通常是不可自定义的

我们可以指定一个不同的元素作为焦点,而不是文本框,比如页面本身:

<Page IsTabStop="True">
    <TextBox/>
</Page>

这是我所知道的防止文本框自动聚焦的最“优雅”的方法。

您可以设置聚焦的元素是什么?或者文本框是你网站上唯一的控件吗?@HimBromBeere我想可以通过编程将焦点设置在文本框后面的下一行元素上。但我有一个(在我看来)相当武断且不那么优雅的解决方案。在最好的情况下,在我单击或按下tab键之前,任何控件都不会被聚焦。但也许事情不是这样的……我使用了你的RootScrollViewer代码,并将其包装成一个行为。现在,我要禁用初始焦点的任何页面,我只需将该行为附加到该页面。工作起来很有魅力。谢谢
<Page Loaded="onPageLoaded">
    <TextBox/>
</Page>
private ScrollViewer getRootScrollViewer()
{
    DependencyObject el = this;
    while (el != null && !(el is ScrollViewer))
    {
        el = VisualTreeHelper.GetParent(el);
    }

    return (ScrollViewer)el;
}

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