繁体   English   中英

如何关注WinRT中的UserControl?

[英]How do I get focus on a UserControl in WinRT?

我写了一个UserControl,其中只有一个形状,并试图让焦点点击它。
它仍然使用tab键获得焦点,但是当我点击它时它不会得到焦点。
即使我编写了一个PointerPressed事件,我在其中设置了焦点,但它无法正常工作。

这是xaml:

<UserControl GotFocus="GotFocus" LostFocus="LostFocus" IsTabStop="True">
    <Rectangle x:Name="rect"/>
</UserControl>

和代码:

private void GotFocus(object sender, RoutedEventArgs e)
{
    rect.Fill = new Windows.UI.Xaml.Media.SolidColorBrush(Colors.Aqua);
}

private void LostFocus(object sender, RoutedEventArgs e)
{
    rect.Fill = new Windows.UI.Xaml.Media.SolidColorBrush(Colors.Beige);
}

有人有想法吗?

编辑:
我正在使用Windows 8.1和VisualStudio 2013。
也许这是一个新功能^^

从调试器看,当您点击它时,UserControl确实正在获取GotFocus事件,但随后会立即失去焦点。 它似乎失去焦点的原因是PointerReleased事件继续路由出可视树并转到根ScrollViewer(所有XAML应用程序在树的根部都有一个ScrollViewer,以允许应用程序内容在屏幕键盘显示时滚动)。

我认为这种行为可以通过设计来考虑。 如果将UserControl放在另一个控件(例如Button)的模板中,您可能希望PointerReleased事件继续将树向上路由到模板化父级(即Button_Click事件仍然会触发)。

如果您希望UserControl在用户单击时保持焦点,则需要自己处理PointerReleased事件。 像这样添加一个处理程序:

XAML:

<UserControl PointerReleased="UserControl_PointerReleased" />

代码背后:

private void UserControl_PointerReleased(object sender, PointerRoutedEventArgs e)
{
    ((UserControl)sender).Focus(FocusState.Pointer);
    e.Handled = true;
}

示例代码可在此处获得: https//github.com/finnigantime/Samples/tree/master/examples/Win8Xaml/UserControl_FocusExample

你的代码仍然可以工作,我没有看到任何错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM