Xamarin 导航后将忽略HorizontalTextAlignment

Xamarin 导航后将忽略HorizontalTextAlignment,xamarin,xamarin.forms,xamarin.android,Xamarin,Xamarin.forms,Xamarin.android,我创建了一个简单的应用程序,用户可以在其中看到更多信息,如果他们在标签上打上标签,如下图所示 问题是,在导航到另一页后,文本会向左移动,即使我已将水平文本对齐设置为结束 只有当我显示该部分并再次隐藏它时(通过点击标签两次),才会发生这种情况。 问题如下图所示,y位于左侧 我的源代码显示了一个简单的应用程序与这个问题,可以从下载 编辑 添加了代码示例 ContentPage非常简单 <StackLayout> <Grid> <Grid.Colu

我创建了一个简单的应用程序,用户可以在其中看到更多信息,如果他们在标签上打上标签,如下图所示

问题是,在导航到另一页后,文本会向左移动,即使我已将
水平文本对齐设置为
结束

只有当我显示该部分并再次隐藏它时(通过点击标签两次),才会发生这种情况。 问题如下图所示,
y
位于左侧

我的源代码显示了一个简单的应用程序与这个问题,可以从下载

编辑 添加了代码示例

ContentPage非常简单

<StackLayout>
   <Grid>
      <Grid.ColumnDefinitions>
         <ColumnDefinition Width="*" />
      </Grid.ColumnDefinitions>
      <Label Text="Test" VerticalOptions="Start" />
      <Label Text="{Binding Text}" HorizontalTextAlignment="End" TextColor="Red" HorizontalOptions="FillAndExpand" BackgroundColor="Yellow">
         <Label.GestureRecognizers>
            <TapGestureRecognizer Command="{Binding ChangeVisibilityCommand}" />
         </Label.GestureRecognizers>
      </Label>
   </Grid>

   <StackLayout IsVisible="{Binding IsVisible}">
      <Label Text="Text 1" />
      <Label Text="Text 2" />
   </StackLayout>

   <Button Command="{Binding OpenAnotherPageCommand}" Text="Open Another Page" />

</StackLayout>

而另一个页面
只是显示一个文本,例如

首先,我无法使用最新版本的Xamarin复制您的问题。也许简单地升级Xamarin(表单)也会删除您案例中不需要的行为

如果没有,您有两个选择:

1-改用水平选项

HorizontalOptions=“EndAndExpand”

因为水平选项在布局引擎中具有更高的优先级。 这不是最优雅的方式,但肯定是最可靠的

2-使用数据绑定

在模型中,只需添加以下属性:

    public TextAlignment LabelAlignment
    {
        get => labelAlignment;
        set
        {
            labelAlignment = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(LabelAlignment)));
        }
    }
    private TextAlignment labelAlignment = TextAlignment.End;
在Xaml中,您将水平对齐更改为

HorizontalTextAlignment=“{Binding LabelAlignment}”


这将起作用,因为在创建屏幕后,模型中的值将在以后加载和更新。

更改
horizontalpoptions=“FillAndExpand”

horizontalpoptions=“CenterAndExpand”

这将强制文本从中心展开并放置在末尾

要强制文本向右,可以向网格中添加另一列定义:

<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>

将和emtpy对象放置到第一个单元格(左侧的单元格)中:

  • 顶部的数字(0)
  • 左边的数字(0)
然后将标签放入第二个单元格,即右边的单元格:

  • 顶部的数字(0)
  • 左边的数字(1)
文本区域将根据文本长度进行调整,并始终位于右侧

我希望这些信息有帮助

您可以在文档中阅读有关网格的更多信息:

请花时间发布相关代码并格式化。不要期望其他人花时间下载zip,解压缩它,将代码加载到IDE中,然后为您调试它。我现在已经添加了代码。很抱歉,这个理论可能对您有所帮助@LasseMadsen Hi,您让它工作了吗?我尝试在测试应用程序上升级Xamarin.Forms,但没有工作。然后,我尝试将HorizontalOptions设置为
EndAndExpand
,但这是不可能的,因为我需要将标签延伸到整个页面。不知何故,数据绑定没有起作用,这很奇怪。你的代码在我的系统上运行没有任何问题,我的数据绑定解决方案也运行良好。您是否仅在共享代码中升级了Xamarin.Forms,还是在本机项目中也升级了Xamarin.Forms?加载您的解决方案后,我得到了Xamarin.Forms的3.0.0.482510版本。也许还可以尝试确保您的MonoDroid和MonoTouch版本是最新版本。我使用的是Visual Studio 15.7.3 Professional,如果有兴趣的话。好的,我只使用社区,但其他方面都是最新的,但我现在找到了修复方法。如果我在
OnDisappearing
中将其设置为
Visible=false
,并在
OnAppearing
中将其设置为
Visible=true
,则它会起作用
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>