2016-07-07 8 views
1

在Xamarin形式,當我使用下面的代碼:爲什麼條目的Focus()方法不能從頁面的構造函數中工作?

public SomePage() 
{ 
    InitializeComponent(); 
    someEntry.Focus(); 
} 

代碼輸入不集中在默認情況下,但是,如果我使用下面的代碼:

protected override void OnAppearing() 
{ 
    base.OnAppearing(); 
    someEntry.Focus(); 
} 

它的工作需要(進入重點)。這是爲什麼?是不是CodeEntry已經存在並坐在它的地方,功能齊全,撥打InitializeComponent()後?我的意思是,我確定可以從頁面構造器中更改Text屬性。

回答

1

在Xamarin中,每個控件都有等效的視圖渲染器,即本地UI元素,只有在將控件添加到本地元素層次結構時纔會創建該元素。在構造函數中,入口的本地元素尚未創建。但是,在OnAppering中,條目的相應本地元素被創建,因此它可以獲得焦點。

此外,這似乎是一個錯誤,因爲Xamarin存儲狀態並在創建本地UI元素時應用它。它提交bug的時間!

+0

這不是一個錯誤。請通過這個。 http://stackoverflow.com/questions/31169029/setting-the-focus-to-an-entry-in-xamarin-forms。焦點方法只能在控件創建和呈現後調用。 –

+0

@AkashAmin它是一個錯誤的原因,因爲它可以通過維護狀態並在ViewRenderer中創建本地元素時應用狀態來輕鬆解決。 –

-2

Xamarin下面是android activity或者iOS的UIviewController的頁面生命週期。 someEntry.Focus();將不會在您的構造函數中工作

+1

我知道這行不通,問題是,爲什麼? – nicks

相關問題