在xaml中按下scrolviewer中的禁用按钮时,如何保持焦点? < >在VisualStudio中为UWP创建默认C++ XAML空白应用程序时,在XAML页面中添加以下代码。 <ScrollViewer> <StackPanel> <TextBox Height="20"></TextBox> <TextBox Height="800"></TextBox> <Button Content="Enabled" IsEnabled="True"></Button> <Button Content="Disabled" IsEnabled="False"></Button> </StackPanel> </ScrollViewer>

在xaml中按下scrolviewer中的禁用按钮时,如何保持焦点? < >在VisualStudio中为UWP创建默认C++ XAML空白应用程序时,在XAML页面中添加以下代码。 <ScrollViewer> <StackPanel> <TextBox Height="20"></TextBox> <TextBox Height="800"></TextBox> <Button Content="Enabled" IsEnabled="True"></Button> <Button Content="Disabled" IsEnabled="False"></Button> </StackPanel> </ScrollViewer>,xaml,uwp-xaml,c++-cx,Xaml,Uwp Xaml,C++ Cx,如果我将焦点放在启用按钮上,然后按下禁用按钮,焦点将转移到第一个文本框 我找到了一个解决方法,添加一个0维可聚焦元素作为堆栈面板的第一个元素 但这会影响其他孩子。(id将由1更改) 您知道在按下scollviewer面板中的禁用按钮后,如何更优雅地将焦点保持在上一个元素上吗 如果stackpanel不在scrollviewer中,则该行为不存在。您可以在scrollviewer的点击事件中以编程方式更改应用程序的焦点 在xaml中: <ScrollViewer Tapped="Scroll

如果我将焦点放在启用按钮上,然后按下禁用按钮,焦点将转移到第一个文本框

我找到了一个解决方法,添加一个0维可聚焦元素作为堆栈面板的第一个元素<代码>

但这会影响其他孩子。(id将由1更改)

您知道在按下scollviewer面板中的禁用按钮后,如何更优雅地将焦点保持在上一个元素上吗


如果stackpanel不在scrollviewer中,则该行为不存在。

您可以在
scrollviewer的点击事件中以编程方式更改应用程序的焦点

在xaml中:

<ScrollViewer Tapped="ScrollViewer_Tapped">
    <StackPanel>
        <TextBox Height="20"></TextBox>
        <TextBox Height="200"></TextBox>
        <Button Content="Enabled"  x:Name="EnableButton"></Button>
        <Button Content="Disabled" IsEnabled="False"></Button>
    </StackPanel>
</ScrollViewer>

如果您有任何其他控件可以获得焦点,您也应该处理它们的类似事件以分配焦点。

找到了解决方案。在获取作为UIElement^和

重复的问题时,您是否只需部分设置
IsTabStop
属性即可解决此问题。使用IsTabStop将焦点从第一个元素更改为ScrollViewer。我想要和你一样的行为。焦点保持不变(保持在最后一个焦点元素上)我需要关注最后一个焦点元素,而不是特定的元素。如果我能接触到所有的孩子,我知道怎么做。在GetFocus上指向获得焦点的mark,在tap上指向该对象。我只能访问ScrollViewer、面板和禁用按钮。我还想对按下禁用按钮的时间进行区分。例如,如果按下禁用按钮id,对焦点不做任何操作,如果只按下scrollviewer,则对scrollviewer进行聚焦。我可以有多个scrollviewer,每个scrollviewer都应该跟踪最后一个聚焦的子级。我想知道是否有一种更简单的方法,即在它最后一个焦点子对象的ScrollViewer中保留DependencyProperty。标志或简单事件回调。由于您在ScrollViewer中按了禁用按钮,ScrollViewer将获得焦点。您可以使用一个变量记录最后一个焦点元素,然后在单击ScrollViewer无法获得焦点的区域时将其设置为焦点。我希望找到一种解决方案,该解决方案不要求每个子元素都有一个GotFocus,它应该注册为最后一个焦点元素。我可以在ScrollViewer中直接更改的内容。(如果有可能让scvrollviewer直接通知哪个孩子获得了焦点,而不是孩子)UWP页面与网页不同。所有控件的底部都有一个ScrollViewer,如果单击disabled按钮,ScrollViewer将获得焦点。这是uwp中必需的行为。也许还有其他方法可以满足您的真正需求。
void CApp::MainPage::ScrollViewer_Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e)
{
    EnableButton->Focus(Windows::UI::Xaml::FocusState::Programmatic);
}