2016-12-30 44 views
1

上下文:Xamarin Forms - 包装按钮文本

我试图使一个应用程序组成的网格按钮。他们中有些人有一个文本比它自己的宽度大

问题:

的事情是,XF按钮被“包装”的文本用省略号代替,中间的某些字符(...):

[Button text]1]

我想的文本被圈在多行像标签文本:

enter image description here

冲浪,我发现一些方法互联网:

  • 使用按钮和的RelativeLayout内的标签。标签重叠按钮并将InputTransparent属性设置为true,您可以实现按钮式控件。

  • 使用标签布局中和处理轻敲姿势

  • 使用特定于平台的代码来渲染一个CustomRenderer本地按钮(我不希望有特定于平台的代码来显示按钮)

这些方法的问题是,结果看起来不像本地按钮或不像原生按钮。

有一种方法可以提供这两种东西吗?外观和行为类似于本地按钮的控件。

回答

4

使用特定于平台的代码来渲染一个CustomRenderer本地按钮(我不希望有特定于平台的代码显示的按钮)

这是国际海事组织的最佳解决方案。它会给你一个原生按钮的外观和感觉。

由于Forms按钮不公开Word wrap属性,因此您必须使用本机控件的属性来执行此操作。下面是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; 
     } 
    } 
} 

在Android上,文中默认换行,所以没有自定义渲染需要的,但要注意,如果一个字是长为了适应按钮的宽度,单词本身将被拆分。我能想到的唯一解决方案是确保您的按钮宽度足够宽,以在按钮文本中保留最长的单词。看到这个回答更多关于此的信息:Wrap text in button gracefully at whitespace