2013-03-18 58 views
0

我有一個頁面,其底部有兩個文本框,一個複選框和另外兩個文本框。當鍵盤已經可見時,將焦點自動設置爲文本框

當我點擊複選框時,我想將焦點設置到它下面的文本框。 這工作正常,軟鍵盤出現,屏幕向上滾動顯示鍵盤上方的文本框。

但是,如果TextBox1或TextBox2當前處於焦點並且鍵盤已顯示,則從CheckBox_Click事件設置焦點將重置屏幕並向下滾動。

我猜的事件彼此衝突 - 文本框失去焦點,並隱藏鍵盤+滾動屏幕回落 - 文本框獲得重點從外部顯示鍵盤(但不卷屏幕)

這可以以某種方式防止嗎?

這裏是XAML的和簡化的版本代碼

的XAML:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
    <StackPanel Margin="0,100,0,0"> 
     <TextBox x:Name="TextBox1" /> 
     <TextBox x:Name="TextBox2" /> 
     <CheckBox Content="Click Me" Click="CheckBox_Click" /> 
     <TextBox x:Name="TextBox3" /> 
     <TextBox x:Name="TextBox4" /> 
    </StackPanel> 
</Grid> 

後面的代碼:

private void CheckBox_Click(object sender, RoutedEventArgs e) 
{ 
    TextBox3.Focus(); 
} 

感謝

+0

嗯,首先,你應該注意:你的CheckBox_click事件不控制checkBox是否已經被選中。我看不到,這是怎麼發生的:** CheckBox_Click事件將重置屏幕,並向下滾動**在您的示例中無法看到任何滾動。你不想錯過什麼嗎? – Olter 2013-03-18 07:52:56

回答

0

你的問題是,當焦點位於不可滾動的控件上時,OS將嘗試移動該頁面容器,並被SIP隱藏。

我已經解決了這個問題,將所有內容放在ScrollViewer中,並根據所選控件以及是否顯示SIP來調整VerticalScrollOffset。這是非常混亂的代碼。問問自己,在開始之前,移動焦點的價值是否值得付出努力,因爲沒有簡單的解決方案。

+0

謝謝馬特。我通過綁定到框架的Y翻譯值(在SIP顯示/隱藏時更改)並使用標誌設置焦點,一旦鍵盤不再顯示,我做了另一個解決方法。有一些時髦的動畫鍵盤滑落並重新備份。 從這裏得到了主意: http://sorokoletov.com/2011/08/windows-phone-70-handling-text-entry-screens/ – 2013-03-19 06:43:59

相關問題