Форма Xamarin: кнопка внутри сетки имеет поле. Как удалить это поле

#button #xamarin #grid #margin

#кнопка #xamarin #сетка #поле

Вопрос:

У меня есть сетка, содержащая набор кнопок. Я установил для columnSpacing сетки значение 0, но у меня все еще есть поле между кнопками. Я предположил, что это элемент управления кнопкой. Даже если я установлю поле для кнопки равным 0, результат будет тот же.

Я не могу использовать BoxView, мне нужен текст и кликабельный на нем.

Ответ №1:

Старая тема, но я получал это на своей платформе Android. Обновление Xamarin.Формы от 2.5 до недавно выпущенного 3.1, похоже, решили эту проблему.

Ответ №2:

Проблема в том, что кнопка Android имеет фоновый рисунок по умолчанию, который имеет поле. Вы можете удалить его с помощью пользовательского средства визуализации. Xamarin.Формирует пользовательский рендерер

Пример:

 using System;
using test.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer(typeof(Button), typeof(DefaultButtonRenderer))]
namespace test.Droid
{
    public class DefaultButtonRenderer: ButtonRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
        {
            base.OnElementChanged(e);

            // Control is Android.Widget.Button, Element is Xamarin.Forms.Button
            if (Control != null amp;amp; Element != null)
            {
                // remove default background image
                Control.Background = null;

                // set background color
                Control.SetBackgroundColor(Element.BackgroundColor.ToAndroid());
            }
        }

        protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);

            if (e.PropertyName == "BackgroundColor")
            {
                // You have to set background color here again, because the background color can be changed later.
                Control.SetBackgroundColor(Element.BackgroundColor.ToAndroid());
            }
        }
    }
}
  

Этот код удалит эффект нажатия кнопки. Если вы хотите сохранить эффект, вам нужно установить управление.Фон для правильного ресурса. (например: Android.Ресурс.Атрибут.selectableItemBackground)

В качестве альтернативы вы можете использовать label с помощью TapGestureRecognizer. Вы можете добавить TapGestureRecognizer к любому представлению.