Ксамарин.Формы: создание кнопки округления / круга из Iconize


Я пытаюсь создать кнопку с закруглением/кругом, которая может отображать значки шрифтов . Поскольку я уже использую Iconize в своем проекте, я попытался создать кнопку Rounded/Circle из существующего IconButton.

Я впервые попробовал это, установив BorderRadiusas Половинное значение HeightRequest/WidthRequest:

<iconize:IconButton HeightRequest="40" WidthRequest="40" 
                    BorderRadius="20"
                    Text="fa-500px" TextColor="Red" FontSize="20" 
                    BackgroundColor="Orange" BorderColor="Red"
                    BorderWidth="2" 
                    VerticalOptions="Start" HorizontalOptions="Center">
</iconize:IconButton>

рендеринг по умолчанию работает так, как ожидалось в UWP, но "щелчок" рендеринга не является хорошим, так как появляется прямоугольник. Однако на Android кнопка всегда находится в режим" по умолчанию": нет ни границы, ни фона, ...

Поэтому я добавил FlatButton control и Renderer для Android:

public class FlatButton : IconButton
{
}

[assembly: ExportRenderer(typeof(FlatButton), typeof(FlatButtonRenderer))]
namespace Iconize.Sample.Droid.Renderers
{
    public class FlatButtonRenderer : ButtonRenderer
    {
        protected override void OnDraw(Android.Graphics.Canvas canvas)
        {
            base.OnDraw(canvas);
        }

        protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
        {
            base.OnElementChanged(e);
        }
    }
}

И я использую его так:

<controls:FlatButton HeightRequest="40" WidthRequest="40" 
                    BorderRadius="20"
                   Text="fa-500px" TextColor="Red" FontSize="20" 
                   BackgroundColor="Orange" BorderColor="Red"
                   BorderWidth="2" 
                   VerticalOptions="Start" HorizontalOptions="Center">
</controls:FlatButton>

на этот раз округлый рендеринг хорош на Android, но я потерял "Отображение" значка шрифта.

Вот скриншот:

скришот

Есть ли способ сохранить округлый визуализатор и значок дисплей? И во второй раз, есть ли способ исправить проблему рендеринга в UWP при нажатии кнопки?

Я также посмотрел другие плагины:

  • Flexbutton : кажется, работает нормально, но нет поддержки UWP
  • ButtonCirclePlugin : я не смог использовать его в своем решении, и я не смог построить предоставленный образец...

у вас есть другие предложения?

1 2

1 ответ:

Я наконец нашел временное решение, переопределив Iconize IconButtonRenderer следующим образом:

  • CircleIconButton : я создал элемент управления, который наследует от IconButton
  • CircleIconButtonRenderer : я продублировал IconButtonRenderer для Android. Мне пришлось удалить первые отладочные тесты и ожидаемый новый формат конструктора: public CircleIconButtonRenderer(Context context) : base(context). Таким образом, этот класс выглядит как "устаревший".
  • MainPage: я реализовал новый элемент управления на странице, как и мы для IconButton.

Но, вероятно, есть лучший способ, так как ожидаемый конструктор не реализован...