Есть ли способ динамически получить RowHeight элемента ListView для использования при настройке ширины столбца сетки? - PullRequest
0 голосов
/ 05 апреля 2020

У меня ListView с HasUnevenRows, установленным в "true". В ListView.ItemTemplate у меня есть сетка, для которой я хотел бы динамически установить ColumnDefinition Width в качестве высоты элемента ListView. Конечная цель состоит в том, чтобы получить ячейку сетки, которая является идеальным квадратом, независимо от содержимого строки Platform и ListView.

Есть ли способ получить текущее значение строки элемента ListView и установить его в ColumnDefinition в ListView.ItemTemplate? Это то, что я могу сделать без использования пользовательского рендерера?

Вот макет XAML, представляющий то, чего я хотел бы достичь:

<ListView HasUnevenRows="True">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>

                <Grid>
                    <Grid.ColumnDefinitions Width=" LISTVIEW ITEM ROW HEIGHT "/>
                    <Grid.ColumnDefinitions Width="*"/>
                </Grid>

            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

1 Ответ

0 голосов
/ 06 апреля 2020

Используйте свойство RowHeight, чтобы установить высоту строки ListView. А затем используйте конвертер, чтобы динамически установить ширину опоясывающего лиша.

Создание конвертера:

 public class MyConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value ;
    }

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

Xaml:

  <ContentPage.Resources>
    <ResourceDictionary>
        <local:MyConverter x:Key="MyConverter" />
    </ResourceDictionary>
</ContentPage.Resources>
<ContentPage.Content>
    <ListView
        x:Name="listView"
        BackgroundColor="Green"
        HasUnevenRows="True"
        ItemsSource="{Binding peoples}"
        RowHeight="100">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <Grid BackgroundColor="Accent">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="{Binding Source={x:Reference listView}, Path=RowHeight, Converter={StaticResource MyConverter}}" />
                            <RowDefinition Height="{Binding Source={x:Reference listView}, Path=RowHeight, Converter={StaticResource MyConverter}}" />
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="{Binding Source={x:Reference listView}, Path=RowHeight, Converter={StaticResource MyConverter}}" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>

                        <BoxView
                            Grid.Row="0"
                            Grid.Column="0"
                            BackgroundColor="Black" />
                        <BoxView
                            Grid.Row="0"
                            Grid.Column="1"
                            BackgroundColor="Blue" />
                        <BoxView
                            Grid.Row="1"
                            Grid.Column="0"
                            BackgroundColor="Yellow" />
                        <BoxView
                            Grid.Row="1"
                            Grid.Column="1"
                            BackgroundColor="DarkGray" />
                    </Grid>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</ContentPage.Content>    

Я использую BoxView для представления квадрата независимо от того, какой цвет черный.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...