2017-04-25 97 views
0

以我Xamarin窗體應用程序我有標籤:標籤窗體

<Label Text="{Binding Number}" HorizontalTextAlignment ="Center"> 

在視圖模型:

private int _number; 
public int Number 
{ 
    get { return _number; } 
    set { SetProperty(ref _number, value); } 
} 

當接收到消息時,我更新數:

MessagingCenter.Subscribe<EmptyMessage>(this, "NUMBER_CHANGED", OnNumberChanged); 

private async void OnNumberChanged(EmptyMessage emptyMessage) 
{ 
    Number = ReadNumberFromDB(); 
} 

所有這些都在MainPage上。當從MainPage觸發「NUMBER_CHANGED」消息時,在UI上更新數字並且包含Number的標籤正確居中

從MainPage,可以PushAsync SecondPage。從第二頁「NUMBER_CHANGED」也可以被觸發。觸發它並返回到MainPage後,數字被更新,包含它的標籤具有適當的值,但不是居中而是左對齊

這是Xamarin UI錯誤嗎?有沒有解決方法?我需要以某種方式告訴標籤刷新它的位置。我希望標籤始終居中。我不知道爲什麼在刷新內容後左對齊。

+0

如果您在XAML中添加了'XAlign ='Center'',這是否有所作爲? –

+0

您可能希望將您的標籤包裹在STACKLAYOUT中,並強制其通過應用寬度居中,而不是嘗試對齊單個標籤 – SergioAMG

+1

這是因爲我在多次發現Horizo​​ntalText/VerticalTextAlignment時沒有特別指定對於動態更新的東西總是表現正確。我也注意到這個問題在Forms 2.3.4中似乎更糟糕,所以大多數時候我只是轉換到了Horizo​​ntal/VerticalOptions,即使它們的性能稍強一點。 – Nick

回答

1

Horizo​​ntalTextAlignment和VerticalTextAlignment在數據更改後無法工作是已知的錯誤。 Bug 55359詳細信息爲TabbedPage,但它發生在許多地方,如Bug 49311

解決方法是暫時使用Horizo​​ntalOptions或VerticalOptions。

-1

最近我遇到了這個問題。我只是做了一個常量變量來跟蹤哪些頁面需要更新OnResume,並相應地重新分配了我的綁定。