2013-07-22 62 views
1

我寫了一個UserControl,只有一個形狀,並試圖讓焦點點擊它。
它仍然使用tab鍵獲得焦點,但當點擊它時它不會獲得焦點。
即使我編寫PointerPressed事件,我在其中設置焦點它不會工作。如何在WinRT中關注UserControl?

這裏是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年
工作也許這是一個新的功能^^

回答

3

從調試器看來,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

+0

是的,這是功能性的。 非常感謝。 –

0

您的代碼仍然可以工作,以及和我沒有看到任何錯誤。