【问题标题】:Circle button has to be wrapped in a stackLayout CollectionView Xamarin forms圆形按钮必须包装在 stackLayout CollectionView Xamarin 表单中
【发布时间】:2020-04-19 04:34:42
【问题描述】:

有人可以告诉我为什么放置一个圆形按钮

(HeightRequest 和 WidthRequest 相同高度 CornerRadius 大小的一半)

在一个集合中,您总是必须用 stacklayout 包装它吗?

代码

<CollectionView >
        <CollectionView.ItemsLayout>
            <GridItemsLayout Orientation="Vertical" 
                             VerticalItemSpacing="10"
                             HorizontalItemSpacing="10" 
                             Span="3"  />
        </CollectionView.ItemsLayout>
        <CollectionView.ItemsSource>
            <x:Array Type="{x:Type x:String}">
                <x:String>1</x:String>
                <x:String>2</x:String>
                <x:String>3</x:String>
                <x:String>4</x:String>
                <x:String>5</x:String>
                <x:String>6</x:String>
                <x:String>7</x:String>
                <x:String>8</x:String>
                <x:String>9</x:String>
                <x:String>0</x:String>
                <x:String>Del</x:String>
            </x:Array>
        </CollectionView.ItemsSource>
        <CollectionView.ItemTemplate>
            <DataTemplate>
                <StackLayout>
                    <Button 
                        WidthRequest="60"
                        HeightRequest="60"
                        CornerRadius="30"
                        HorizontalOptions="Center"
                        VerticalOptions="Center"
                        BorderWidth="2"
                        BorderColor="Red"
                        Text="{Binding .}"/>
                </StackLayout>
            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>

【问题讨论】:

    标签: xamarin.forms


    【解决方案1】:

    根据我的研究,如果直接将Button 放入DataTemplate 中,WidthRequestHeightRequest 将不起作用。 Button 的大小将设置为与父控件相同。

    如果 xamarin 表单最后在 Android 平台中渲染你的布局,onMeasure 方法将被执行。

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
    

    如果我们不重写onMeasure 方法。 widthMeasureSpec 和 heightMeasureSpec 是父级传递给我们的要求。

    如果您想了解更多关于Android原生中onMeasure的详细信息,您可以在Google中搜索“Android Custom View: mastering onMeasure”。

    为了支持这个结论,我设置了蓝色背景的``。这是运行截图。

    如果我删除了CornerRadius="30"StackLayout。这是运行截图。

    比较这两种布局后,结果是一样的。如果您想在CollectionView 中添加特定大小的Button,请包裹stacklayout

    【讨论】:

    • 谢谢,我只需要确认它基本上需要被打包,除非我覆盖 OnMeasure。感谢您的宝贵时间
    猜你喜欢
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 2016-09-07
    相关资源
    最近更新 更多