Xamarin.Forms Listview是否具有两行标签?

Xamarin.Forms Listview是否具有两行标签?,xamarin,xamarin.forms,monotouch.dialog,Xamarin,Xamarin.forms,Monotouch.dialog,我正在将MonoTouch.Dialog应用程序转换为Xamarin.Forms 我在ListView中有一个单元格,它有一条“细节”线,应该有2行长,然后应该截断尾部 var lblDetail = new Label { LineBreakMode = LineBreakMode.TailTruncation, Text = "a really long string that should show 2 lin

我正在将MonoTouch.Dialog应用程序转换为Xamarin.Forms

我在ListView中有一个单元格,它有一条“细节”线,应该有2行长,然后应该截断尾部

        var lblDetail = new Label
        {
            LineBreakMode = LineBreakMode.TailTruncation,
            Text = "a really long string that should show 2 lines then ..."
        };

如何设置“Lines=2”

您可能需要自定义ListView:

    <ListView x:Name="ListMenu" ItemsSource="{Binding _YourItems_}" >
      <ListView.ItemTemplate>
        <DataTemplate>
          <ViewCell>
            <ViewCell.View>
              <StackLayout Orientation="Horizontal">
                <Label Text="{Binding _YourText_}" TextColor="Black" />
              </StackLayout>
            </ViewCell.View>
          </ViewCell>
        </DataTemplate>
      </ListView.ItemTemplate>
    </ListView>


即使文本不适合一行,它也会自动换行。

以下代码对我来说很好:)


我用自定义渲染器解决了这个问题

这是我的xaml(在我的pcl项目中)

这是iOS的渲染器:

[assembly: ExportRenderer(typeof(MultiLineLabel), typeof(MultiLineLabelRenderer))]
namespace NameSpace.iOS.Renderers
{
    public class MultiLineLabelRenderer : LabelRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
        {
            base.OnElementChanged(e);
            if (Control != null)
            {
                Control.LineBreakMode = UILineBreakMode.TailTruncation;
                Control.Lines = 3;
            }
        }
    }
}
[程序集:ExportRenderer(typeof(multileLabel),typeof(multileLabelRenderer))]
命名空间namespace.iOS.Renderers
{
公共类multileLabelRenderer:LabelRenderer
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(控件!=null)
{
Control.LineBreakMode=UILineBreakMode.TailTruncation;
控制线=3;
}
}
}
}

您可能需要创建一个自定义单元格。XF实验室有一个ExtendedTextCell-它可以做您需要的事情,文档稀少,很难说。我的答案对您有帮助吗?我的答案解决了您的问题吗?因为它解决了我的问题;)如何在
Android
中实现这一点?
<ListView ItemsSource="{Binding Cards}">
  <ListView.ItemTemplate>
    <DataTemplate>
      <ViewCell>
          <Grid Padding="10">
            <Grid.ColumnDefinitions>
              <ColumnDefinition Width="60"/>
              <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Image Source="{Binding Icon}"/>
            <customRenderers:MultiLineLabel Text="{Binding Summary}"
                                            Grid.Column="1"/>
          </Grid>
      </ViewCell>
    </DataTemplate>
  </ListView.ItemTemplate>

</ListView>
public class MultiLineLabel : Label
    {
    }
[assembly: ExportRenderer(typeof(MultiLineLabel), typeof(MultiLineLabelRenderer))]
namespace NameSpace.iOS.Renderers
{
    public class MultiLineLabelRenderer : LabelRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
        {
            base.OnElementChanged(e);
            if (Control != null)
            {
                Control.LineBreakMode = UILineBreakMode.TailTruncation;
                Control.Lines = 3;
            }
        }
    }
}