You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin.Forms中如何避免价格Label被过长名称Label截断?

问题

当前布局是一个白色背景的Frame,内部包含一个水平方向的StackLayout,其中有两个带背景色的Label。当名称Label的文本较长时,价格Label会因空间不足被截断。尝试调整HorizontalOptions、Label的LineBreakMode属性后仍未解决,请问需要修改哪个属性才能避免价格Label被截断?

代码片段:

Frame elementFrame = new Frame {
    BackgroundColor = Xamarin.Forms.Color.White,
    Padding = 20,
};

StackLayout elementStackLayout = new StackLayout { 
    Orientation = StackOrientation.Horizontal,
    HorizontalOptions = LayoutOptions.Fill,
    BackgroundColor = Xamarin.Forms.Color.Orange
};

Label elementName = new Label {
    BackgroundColor = Xamarin.Forms.Color.Aqua,
    Text = FinalProduct.GetAttribute("Nome"),
    HorizontalOptions = LayoutOptions.Start,
};

Label elementPrice = new Label {
     BackgroundColor = Xamarin.Forms.Color.Aqua,
     LineBreakMode = LineBreakMode.NoWrap,
     HorizontalOptions = LayoutOptions.EndAndExpand,
     Text = "€" + ( Decimal.Parse(FinalProduct.GetAttribute("Prezzo")) * Int16.Parse(FinalProduct.GetAttribute("Quantita")) ).ToString("0.00"),
     HorizontalTextAlignment = TextAlignment.End
};

elementStackLayout.Children.Add(elementName);
elementStackLayout.Children.Add(elementPrice);
elementFrame.Content = elementStackLayout;
解决方案

核心是调整名称Label的布局与文本换行属性,同时优化价格Label的布局设置,避免长文本挤压价格区域:

  1. 给名称Label设置HorizontalOptions = LayoutOptions.StartAndExpand,让它占用除价格Label所需空间外的剩余区域,同时不会挤压价格Label的显示空间;
  2. 给名称Label添加LineBreakMode属性(比如LineBreakMode.WordWrap或LineBreakMode.TailTruncation),让长文本在自身区域内处理换行或截断,不会向外侵占空间;
  3. 价格Label的HorizontalOptions改为LayoutOptions.End即可,不需要EndAndExpand,保证它固定在右侧并完整显示自身内容。

修改后的代码片段:

Label elementName = new Label {
    BackgroundColor = Xamarin.Forms.Color.Aqua,
    Text = FinalProduct.GetAttribute("Nome"),
    HorizontalOptions = LayoutOptions.StartAndExpand,
    LineBreakMode = LineBreakMode.WordWrap, // 按需选择WordWrap或TailTruncation
};

Label elementPrice = new Label {
     BackgroundColor = Xamarin.Forms.Color.Aqua,
     LineBreakMode = LineBreakMode.NoWrap,
     HorizontalOptions = LayoutOptions.End,
     Text = "€" + ( Decimal.Parse(FinalProduct.GetAttribute("Prezzo")) * Int16.Parse(FinalProduct.GetAttribute("Quantita")) ).ToString("0.00"),
     HorizontalTextAlignment = TextAlignment.End
};

原理:水平方向的StackLayout中,StartAndExpand会优先保证后续控件的显示空间,再让当前控件填充剩余区域;配合名称Label的换行/截断设置,长文本只会在自身范围内处理,彻底避免挤压价格Label导致其被截断。

内容的提问来源于stack exchange,提问作者L_or_Enzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 09:25:14