【问题标题】:Xamarin.Forms Listview with 2 line label?带有 2 行标签的 Xamarin.Forms Listview?
【发布时间】:2014-12-23 22:24:16
【问题描述】:

我正在将 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”的内容

【问题讨论】:

  • 您可能需要创建一个自定义单元格。 XF Labs 有一个 ExtendedTextCell - 它可以满足您的需求,文档很少,所以很难说。
  • 我的回答对你有帮助吗?
  • 我的回答解决了你的问题吗?因为它解决了我的问题;)

标签: xamarin xamarin.forms monotouch.dialog


【解决方案1】:

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

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

<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>

这是我的MultiLineLabel 课程

public class MultiLineLabel : Label
    {
    }

这是 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;
            }
        }
    }
}

【讨论】:

  • 如何在Android 中实现同样的事情@任何解决方法?
【解决方案2】:

下面的代码对我来说很好:)

 UserNotesListView = new ListView() {
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions = LayoutOptions.FillAndExpand,
                HasUnevenRows=true,
                ItemsSource=//upon your bussiess
            };

            DataTemplate dt=new DataTemplate(()=>
                {
                    var LabelText = new Label();
                    LabelText.SetBinding(Label.TextProperty, new Binding("note"));
                    return new ViewCell { View = LabelText };
            });
            UserNotesListView.ItemTemplate = dt;
            Content = new StackLayout
            {
                HorizontalOptions=LayoutOptions.FillAndExpand,
                Children=
                {
                    UserNotesListView
                }
            };

【讨论】:

    【解决方案3】:

    您可能想要自定义 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>
    

    即使文字超过一行,它也会自动换行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多