我的 xamarin 表单项目中有一个如下所示的编辑器。
当我在上面输入消息时,我需要根据字符数增加编辑器的高度。
这是我底部的完整代码,我添加了一个框架布局以使入口角为圆形:
<StackLayout
HorizontalOptions="FillAndExpand"
x:Name="tweetBox"
VerticalOptions="End"
Margin="0,0,0,10"
BackgroundColor="#f2f2f2"
Orientation="Horizontal">
<Image
WidthRequest="25"
HeightRequest="25"
VerticalOptions="Center"
Source="ic_add_blue_xx.png"
Margin="10,5,-5,5">
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="ShowPicureOptions"
NumberOfTapsRequired="1" />
</Image.GestureRecognizers>
</Image>
<Frame
Padding="0"
Margin="5,5,0,5"
HorizontalOptions="FillAndExpand"
CornerRadius="10">
<Editor
x:Name="tweetText"
HorizontalOptions="FillAndExpand"
VerticalOptions="Center"
FontFamily="Bold"
BackgroundColor="White"
TextColor="#959595"
AutoSize="TextChanges"
PlaceholderColor="#959595"
Placeholder=" Enter Message..."/>
</Frame>
<Image
VerticalOptions="Center"
WidthRequest="25"
Margin="5,5,10,5"
HeightRequest="25"
HorizontalOptions="End"
Source="ic_send_xx.png">
<Image.GestureRecognizers>
<TapGestureRecognizer
Tapped="SendTweet_Icon_Clicked"
NumberOfTapsRequired="1" />
</Image.GestureRecognizers>
</Image>
</StackLayout>
它现在内置于 Xamarin.Forms 中。只需使用
Editor
控件并将 AutoSize
属性设置为 TextChanges
。请注意,当您设置 HeightRequest
时,自动调整大小将不起作用。
更多信息请访问:https://learn.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/text/editor
更新:根据评论,我们解决了用 Grid 替换 StackLayout 可以帮助您实现结果。这是因为 StackLayout 只占用其子级(最初)占用的空间。网格能够动态增长。
我在 Android 上遇到了类似的问题,并且能够通过在自定义渲染器中将
IsSingleLine
属性设置为 false
来解决该问题。
这是渲染器的要点:
protected override void OnElementChanged (ElementChangedEventArgs<Editor> e)
{
base.OnElementChanged (e);
if (Control != null)
{
Control.SetSingleLine(false);
}
}
官方 Xamarin.Forms 文档指出这一点很奇怪
Editor控件用于接受多行输入。
但是,其在 Android 上的默认设置不允许多行。