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 в стиле, но я не могу понять, как поместить фоновые градиенты в стиль.

У меня пока так:

            <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


person George M Ceaser Jr    schedule 10.12.2020    source источник


Ответы (1)


Попробуйте с:

<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 цвета»

и это не имеет смысла градиент только с одним цветом.

person Cfun    schedule 10.12.2020
comment
Что ж, имеет смысл использовать один цвет, так как я делаю это только для устранения дефекта в элементе управления блинами в UWP, когда цвет фона не обрезается до границ закругленных углов. Этот обходной путь задокументирован в проблемах для управления блинами в их проекте github. Остальное я попробую и посмотрю, работает ли это, и отпишусь. Спасибо. - person George M Ceaser Jr; 13.12.2020
comment
Хорошо, что вы можете опубликовать ссылку на эту проблему в комментарии, может быть, это может быть полезно для кого-то. - person Cfun; 13.12.2020
comment
Вот ссылка на проблему с предоставленным обходным путем: github.com/sthewissen/ Xamarin.Forms.PancakeView/issues/150 - person George M Ceaser Jr; 15.12.2020