Xamarin表单 - 包装按钮文本

agu*_*uez 2 c# xamarin.ios xamarin.android xamarin xamarin.forms

语境:

我正在尝试制作一个由按钮网格组成的应用程序.其中一些文本的大小超过了自己的宽度

问题:

问题是XF Button正在"包装"文本,用省略号替换中间的一些字符(...):

[按钮文字] 1]

我想将文本包装成多行,如标签中的文字:

在此输入图像描述

浏览互联网我发现了一些方法:

  • 在RelativeLayout中使用Button和Label.Label与Button重叠并将InputTransparent属性设置为true,您可以实现类似Button的控件.

  • 在布局中使用标签并处理Tap手势

  • 使用特定于平台的代码使用CustomRenderer呈现本机按钮(我宁愿不使用特定于平台的代码来显示按钮)

这些方法的问题是结果看起来不像本机按钮或不像本机按钮.

有一种方法可以同时提供这两种方法吗?一种外观和行为类似于原生按钮的控件.

jgo*_*SFT 12

使用特定于平台的代码使用CustomRenderer呈现本机按钮(我宁愿不使用特定于平台的代码来显示按钮)

这是IMO的最佳解决方案.它将为您提供原生按钮的外观和感觉.

由于Forms按钮不公开自动换行属性,因此您必须使用本机控件的属性来执行此操作.以下是iOS上自定义渲染器的非常简单的代码,用于启用自动换行:

using System;
using NameSpaceForMyiOSApp;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;

[assembly: ExportRenderer(typeof(Button), typeof(MyButtonRenderer))]
namespace NameSpaceForMyiOSApp
{
    public class MyButtonRenderer : ButtonRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
        {
            base.OnElementChanged(e);
            if (Control != null)
                Control.TitleLabel.LineBreakMode = UIKit.UILineBreakMode.WordWrap;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在Android上,默认情况下文本会换行,因此不需要自定义渲染器,但请注意,如果单个单词要长到适合按钮的宽度,则单词本身将被拆分.我能想到的唯一解决方案是确保按钮宽度足够宽以容纳按钮文本中最长的单词.有关此内容的更多信息,请参阅此SO答案:在空格中优雅地将文本换行

  • 我还必须添加“Control.TitleLabel.TextAlignment = UIKit.UITextAlignment.Center;”,否则对齐方式会稍微不平衡 (2认同)