2013-01-18 75 views
0

我有一個實際上是SwapChainBackgroundPanel的頁面,我用它來渲染SharpDx(本質上是一個C#DirectX包裝器)。對於我的輸入,我處理面板的指針*和鍵*事件。問題在於該面板在角落還有一個Button(後退按鈕),出於某種原因該按鈕正在獲取默認焦點。所以當我按下空格鍵時,它會調用按鈕的單擊事件。如何重置Xaml的焦點SwapChainBackgroundPanel

爲防止這種情況發生,用戶必須點擊背景(面板)將焦點放回去。問題是,我無法找到一種方法,通過編程方式將焦點移回面板並離開按鈕。只有按鈕有任何設置焦點的功能,這對我沒有幫助。

回答

1

你可以將焦點移動到另一個隱形按鈕:

XAML

<Grid> 
    <Button 
     x:Name="b" 
     Content="click" 
     Click="B_OnClick" /> 
    <Button 
     x:Name="b2" 
     Opacity="0.005" /> 
</Grid> 

C#

private async void B_OnClick(object sender, RoutedEventArgs e) 
    { 
     b.Focus(FocusState.Programmatic); 
     await Task.Delay(100); 
     b2.Focus(FocusState.Programmatic); 
    } 

我其他的答案似乎並不在這裏工作,但我將保留它,因爲它可能在未來工作,我相信它應該在Windows Phone上工作。

+0

那麼,它仍然不會將關鍵事件傳遞給主面板。但至少我不會意外擊中後退按鈕,雖然... –

+0

趕上核心窗口上的重要事件,而不是 - 「Window.Current.CoreWindow.KeyDown」 –

+0

這工作!謝謝。 –

0

你可以嘗試調用

button.IsEnabled = false; 
button.IsEnabled = true; 

從按鈕失去焦點。

+0

它不起作用。 –

+0

你可以嘗試延遲'await Task.Delay(100)' –

+0

不,這似乎不工作... 讓我試試另一個答案。 –