如何在列表视图中以不同方式对齐标签

Posted

技术标签:

【中文标题】如何在列表视图中以不同方式对齐标签【英文标题】:How to align labels differently in listview 【发布时间】:2021-06-24 03:46:39 【问题描述】:

ListView 中有 2 个标签。 第一个标签是ItemName(垂直对齐开始), 第二个标签是ItemDescription(垂直对齐到结尾)。

我想要实现的是... 当ItemDescription 为空时,我希望ItemName 垂直居中对齐

由于我是新人,如果你也能举个例子就好了。

这是我的 Xaml (ItemsPage)

<ContentPage.Content>
    <StackLayout>
        <ListView ItemsSource="Binding _items, Mode=TwoWay" x:Name="lstView" SelectedItem="Binding SelectedItem">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <Grid Padding="0,0,8,0" Margin="3,0,3,0">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="7*"/>
                            </Grid.ColumnDefinitions>

                        <Image Source="Binding ImageUrl" Grid.Column="0" Margin="3"></Image>

                        <Label Text="Binding ItemName" MaxLines="1" LineBreakMode="TailTruncation" FontSize="Medium" FontAttributes="Bold"></Label>

                        <Label Text="Binding ItemDescription" MaxLines="1" LineBreakMode="TailTruncation" Grid.Column="1" VerticalTextAlignment="End"></Label>
                
                        </Grid>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>
</ContentPage.Content>

【问题讨论】:

【参考方案1】:

您可以使用 IValueConverter

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/data-binding/converters

<Label Text="Binding ItemName" MaxLines="1" LineBreakMode="TailTruncation" FontSize="Medium" FontAttributes="Bold" VerticalTextAlignment="Binding ItemDescription,Converter=StaticResource checkItemDescription"></Label>

转换器

public class AlignmentConverter : IValueConverter

        public object Convert(object value, Type targetType, object parameter, 
    CultureInfo culture)
    
        if(value==null)
            return LayoutOptions.Start;

        return LayoutOptions.End; 

    

        public object ConvertBack(object value, Type targetType, object parameter, 
    CultureInfo culture)
    
          throw new NotImplementedException();
    

【讨论】:

非常感谢,您的回复真的很有帮助。我真的很感激。我唯一改变的是TextAlignment 而不是LayoutOptions(我不知道它是否真的很重要)并且它工作得很好。再次感谢您 恭喜@Noah!很高兴听到这个消息!

以上是关于如何在列表视图中以不同方式对齐标签的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ios swift 中以编程方式将情节提要视图控制器加载到标签栏控制器中?

在 Swift 中以编程方式将视图添加到 stackview

在 swift 中以编程方式在堆栈视图中添加标签和文本视图

在可可触摸中以编程方式将视图位置设置为右上角

导航栏标题视图对齐

在 Objective-C Xcode 5 中以编程方式创建视图