首页 > 解决方案 > Xamarin Forms 将 Xaml 转换为通用资源样式 Yummy PancakeView

问题描述

我正在尝试将煎饼控件的属性转换为样式,因此我所有的煎饼控件的样式都相同。这就是我的 XAML 的样子。

    <yummy:PancakeView x:Name="pvMEssage" BackgroundColor="{DynamicResource ExceptionBackground}" CornerRadius="0,0,20,20" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"
                       Padding="0,0,0,0" Margin="0,0,0,0">
        <yummy:PancakeView.BackgroundGradientStops StartPoint="0,0" EndPoint="0,0">
            <yummy:GradientStop Offset="0.1" Color="{DynamicResource ExceptionBackground}" />
        </yummy:PancakeView.BackgroundGradientStops>
        <yummy:PancakeView.Border>
            <yummy:Border Color="White" Thickness="2" />
        </yummy:PancakeView.Border>

我知道如何在样式中使用 setter.value,但我不知道如何将 backgroundgradientstops 放入样式中。

到目前为止我有这个:

            <Style x:Key="PancakeViewTop" TargetType="yummy:PancakeView">
            <Setter Property="CornerRadius" Value="20,20,0,0" />
            <Setter Property="HorizontalOptions" Value="FillAndExpand" />
            <Setter Property="VerticalOptions" Value="FillAndExpand" />
            <Setter Property="Padding" Value="0,0,0,0" />
            <Setter Property="Margin" Value="0,0,0,0" />
            <Setter Property="BackgroundGradientStartPoint" Value="0,0" />
            <Setter Property="BackgroundGradientEndPoint" Value="0,0" />
            <Setter Property="BackgroundGradientStops">
                <Setter.Value>
                    <yummy:GradientStop Offset="0.1" Color="{DynamicResource ExceptionBackground}" />
                </Setter.Value>
            </Setter>
            <Setter Property="Border">
                <Setter.Value>
                    <yummy:Border Color="White" Thickness="2" />
                </Setter.Value>
            </Setter>
        </Style>

但我在这些线上遇到错误

<Setter Property="BackgroundGradientStops">
    <Setter.Value>

指出“无法分配指定的值。预期以下类型:“GradientStopCollection”

标签: xamlxamarin.forms

解决方案


尝试:

<Setter Property="BackgroundGradientStops">
    <Setter.Value>
        <pancake:GradientStopCollection>
            <pancake:GradientStop Offset="0.1" Color="{DynamicResource ExceptionBackground}"/>
            <pancake:GradientStop Offset="0.5" Color="{DynamicResource OtherColor}"/>
        </pancake:GradientStopCollection>
    </Setter.Value>
</Setter>

您还需要指定至少 2 种颜色 (2 GradientStop) 否则会引发异常

Java.Lang.IllegalArgumentException: '需要 >= 2 种颜色'

并且只有一种颜色的渐变没有意义。


推荐阅读