2017-04-25 99 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,并相应地重新分配了我的绑定。