Xamarin表格:网格内的按钮有余量。如何删除该保证金

时间:2016-10-11 21:27:53

标签: button xamarin grid margin

我有一个包含一组按钮的网格。我已将网格的columnSpacing设置为0但仍然具有按钮之间的边距。我假设它的按钮控制。即使我将按钮上的边距设置为0,结果也是一样的。

我不能使用boxView,我需要一个文本并可点击它。

2 个答案:

答案 0 :(得分:2)

旧线程,但是我在我的Android平台上得到了。将Xamarin.Forms从2.5升级到最近发布的3.1似乎已经解决了它。

答案 1 :(得分:0)

问题是,android按钮具有默认背景drawable,具有边距。您可以使用自定义渲染器将其删除。 Xamarin.Forms custom renderer

示例:

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 && 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());
            }
        }
    }
}

此代码将删除按钮单击效果。如果要保持效果,则必须将Control.Background设置为适当的资源。 (例如:Android.Resource.Attribute.SelectableItemBackground)

或者,您可以将标签与TapGestureRecognizer一起使用。您可以将TapGestureRecognizer添加到任何视图。