根据文本所需的空间自动设置标签高度请求

3
我有一个位于 Frame 中的 StackLayout 中的 Label:
<Frame Grid.Row="0" Margin="0, 0, -10, 0" OutlineColor="Transparent" HasShadow="False" Grid.Column="1" BackgroundColor="{StaticResource rightBubbleColor}">
  <StackLayout>
    <Label
      Style="{StaticResource rightBubbleStyle}"
      TextColor="{StaticResource rightBubbleFontColor}"
      Text="{Binding message}" />
  </StackLayout>
</Frame>

这给我带来了这个结果:

Label without HeightRequest

这里的问题是最后一条消息实际上有更多的文本,需要6行才能显示完整的内容。
如果我为Label设置一个HeightRequest的值,它也会改变Frame的高度。例如,如果我设置一个150的值,就会得到以下结果:

Label with HeightRequest

我需要根据文本所需的高度动态设置HeightRequest的值。 有人知道我如何实现这一点(最好在xaml中),或者这甚至是解决我的问题的错误方法吗?
编辑1:从Label中删除样式无法解决问题。 它只出现在UWP上。 请注意,我没有Windows Phone来测试它,该问题发生在我的本地机器(Windows 10桌面)上。
编辑2:根据Xamarin文档,高度应根据内容自动调整大小:当应用程序开发人员将ListView.HasUnevenRows属性设置为true时,列表视图的行为仍取决于ListView.RowHeight属性。 首先,如果开发人员未设置ListView.RowHeight属性或将其设置为-1,则列表视图项会自动调整大小以适合其内容。 这是所需的行为和ListView.HasUnevenRows值为true的预期使用情况,如上所述。

我制作了一个基本演示。但是没有复现你的问题。标签会根据文本量自动更改其高度。您能否请提供完整的XAML代码以及样式? - Elvis Xia - MSFT
@Evlis 谢谢。你在UWP上测试过吗?它在 Android 和 iOS 上对我有效,但在 UWP 上不行。 - Dennis Schröer
是的,我在UWP上测试过了。所以我猜其他东西正在裁剪标签。 - Elvis Xia - MSFT
@Elvis 我已经编辑了我的问题。风格不是问题。 - Dennis Schröer
那么请您在一个空的 Xamarin 项目上尝试这些代码,可以吗? - Elvis Xia - MSFT
太棒了,很高兴听到这个问题已经解决 :) - Elvis Xia - MSFT
1个回答

2
我找到了一个解决方案。这是问题所在:
<RowDefinition Height="*" />

我将值设置为Auto,现在它可以工作了。奇怪的是,在iOS和Android上它有不同的行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接