2016-12-30 252 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