Xamarin Forms Изменение размера элемента в CollectionView - PullRequest
0 голосов
/ 07 января 2020

У меня есть этот код:

<ContentPage.Content>
    <StackLayout HorizontalOptions="Fill" Padding="15">
        <Frame IsClippedToBounds="True" HeightRequest="45" CornerRadius="5" Padding="0" BackgroundColor="Transparent">
            <Entry Placeholder="Search" ReturnType="Done" PlaceholderColor="Gray" x:Name="txtSearch" Margin="5,0,0,0" TextColor="White" />
        </Frame>

        <CollectionView ItemsSource="{Binding sourceList}">
            <CollectionView.ItemsLayout>
                <GridItemsLayout Orientation="Vertical"
                    Span="2" />
            </CollectionView.ItemsLayout>
                <CollectionView.ItemTemplate>
                    <DataTemplate>

                        <ff:CachedImage
                    Source="{Binding Source}"
                    VerticalOptions="Center"
                    HorizontalOptions="Fill"
                    x:Name="TemplateImage" />

                    </DataTemplate>
                </CollectionView.ItemTemplate>
        </CollectionView>
    </StackLayout>
</ContentPage.Content>

Теперь я надеялся, что смогу просто сделать:

public TemplateList()
{
    InitializeComponent();

    var mainDisplayInfo = DeviceDisplay.MainDisplayInfo;
    var width = mainDisplayInfo.Width;
    var density = mainDisplayInfo.Density;
    var ScaledWidth = width / density;

    var WidthHeight = (ScaledWidth - (3 * 10)) / 2;

    SizeChanged += (s, a) =>
    {
        TemplateImage.HeightRequest = WidthHeight;
        TemplateImage.WidthRequest = WidthHeight;
    };
}

Но я получаю ошибку:

Имя TemplateImage не существует в текущем контексте

Теперь я объявил его в своем xaml со следующей строкой:

<ff:CachedImage
    Source="{Binding Source}"
    VerticalOptions="Center"
    HorizontalOptions="Fill"
    x:Name="TemplateImage" />

Теперь, как я могу изменить размер что CachedImage в C#?

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

Попробуйте использовать ItemSizingStrategy="MeasureFirstItem", если все ваши предметы имеют одинаковую высоту. См. Здесь - https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/collectionview/layout#item -размер

0 голосов
/ 07 января 2020

Правильный подход состоит в том, чтобы связать свойство HeightRequest вашего CachedImage в XAML следующим образом

<ff:CachedImage
    Source="{Binding Source}"
    HeightRequest="{Binding Source=MyViewModel Path=wishedHeight}"
    VerticalOptions="Center"
    HorizontalOptions="Fill" />

, где wishedHeight - это свойство в вашей модели представления .

Обратите внимание, что вы не можете использовать напрямую

HeightRequest="{Binding wishedHeight}" 

, так как wishHeight не является частью класса TemplateSource, к которому привязан ваш CachedImage!

...