2013-04-13 61 views
2

我是WP開發新手,並試圖親身實踐。如何強制鍵盤不重疊堆棧面板

如果你看看錢包PIN碼屏,對焦被自動設置爲文本框,以便用戶可以開始輸入,並在鍵盤上沒有隱藏/重疊 & 取消按鈕。

enter image description here

另外,如果碰到返回鍵,這些按鈕保持在底部,如下圖所示。 ​​

我也試圖擁有相同種類的用戶界面。但在我的情況下,

  1. 我無法在頁面加載後將焦點設置爲文本框。 I 無法在OnNavigatedTo事件中獲取文本框的.Focus()方法。 我應該這樣做嗎?

  2. 當我手動點擊文本框輸入一個值,鍵盤重疊 我的堆疊面板包含'保存'&'取消'按鈕,如下所示。我 不希望發生這種情況。相反,屏幕應該看起來像第二張圖片中顯示的 。

enter image description here

下面是XAML代碼我嘗試。

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
    <StackPanel> 
     <TextBlock Name="txtLimit" TextWrapping="Wrap" Text="Enter the value" Style="{StaticResource PhoneTextSubtleStyle}"/> 
     <TextBox AcceptsReturn="True" InputScope="Number" /> 
    </StackPanel> 

    <StackPanel VerticalAlignment="Bottom" HorizontalAlignment="Center" Orientation="Horizontal" > 
     <Button Content="save" Width="200" /> 
     <Button Content="cancel" Width="200"/> 
    </StackPanel> 
</Grid> 

回答

2

用於設置焦點第一次導航,你顯然需要設置這個在Loaded事件處理程序。

對於後退導航(從應用程序切換時開始),OnNavigatedTo中的那個會按照您的預期觸發。

// Constructor 
    public MainPage() 
    { 
     InitializeComponent(); 
     this.Loaded += (sender, args) => this.textBox.Focus(); 
    } 

    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     base.OnNavigatedTo(e); 
     this.textBox.Focus(); 
    } 

但是,您需要將按鈕添加到ApplicationBar以在屏幕鍵盤下方顯示。

但是,SDK不允許在應用程序欄中使用矩形按鈕,只能使用圖標按鈕。

+0

所以這種行爲是特定於操作系統,並暴露給開發人員? 我懷疑我們是否可以定製appbar,甚至隱藏這3個點,如果我不使用菜單項。有沒有其他的方式來實現這一目標? 將用戶導航到頁面後,如何將焦點設置爲文本框? – NoobDeveloper

+0

針對文本框焦點更新的答案。除了編寫自己的屏幕鍵盤之外,我不知道有什麼其他的方式來做你想做的事情,這是不小的任務。 –

+0

this.textBox.Focus();在WP8中不起作用。在TextBox_Loaded事件中做了它。 (sender as TextBox).Focus(); – NoobDeveloper

0

在的OnNavigatedTo方法,你可以嘗試使用調度程序是這樣的:

Dispatcher.BeginInvoke(()=>{ 
    this.textBox.Focus(); 
    }); 

而且,正如指出的那樣,你不能在appBar矩形按鈕,但你可以使用標準的一個(如例如鏈接在按鈕中)。

+1

我在一個非常簡單的WP8項目中嘗試了這一點,同時提出了上面的答案。它沒有工作... –