【问题标题】:Xamarin Forms Change size of element in CollectionViewXamarin Forms 更改 CollectionView 中元素的大小
【发布时间】:2020-03-17 11:38:07
【问题描述】:

我有这个代码:

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

现在如何在 C# 中更改 CachedImage 的大小?

【问题讨论】:

  • 我会使用 DataBinding 将 CachedImage 的 WidthRequest 和 HeightRequest 绑定到您作为 ItemsSource 引用的集合中的数据对象。

标签: c# xamarin xamarin.forms xamarin.android xamarin.ios


【解决方案1】:

正确的方法是在 XAML 中绑定CachedImageHeightRequest 属性,如下所示

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

其中wishedHeight 是您的视图模型中的一个属性。

注意不能直接使用

HeightRequest="{Binding wishedHeight}" 

因为wishedHeight 不是您的CachedImage 绑定到的TemplateSource 类的一部分!

【讨论】:

    【解决方案2】:

    如果您的所有项目都具有相同的高度,请尝试使用ItemSizingStrategy="MeasureFirstItem"。参考这里-https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/collectionview/layout#item-sizing

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-12
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多