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

How to align labels differently in listview

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

您可以使用 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();
    }
}