Xamarin 表单:网格内的按钮有边距。如何删除该边距
Xamarin Form: Button inside Grid have a margin. How to remove that margin
我有一个包含一组按钮的网格。我已将网格的 columnSpacing 设置为 0,但按钮之间仍有边距。我假设它是按钮控件。即使我将按钮的边距设置为 0,结果也是一样的。
我不能使用 boxView,我需要一个文本并且可以点击它。
问题是,android 按钮具有带边距的默认背景可绘制对象。您可以使用自定义渲染器将其删除。 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 添加到任何视图。
旧线程,但我在我的 Android 平台上得到了这个。将 Xamarin.Forms 从 2.5 升级到最近发布的 3.1 似乎已经解决了这个问题。
我有一个包含一组按钮的网格。我已将网格的 columnSpacing 设置为 0,但按钮之间仍有边距。我假设它是按钮控件。即使我将按钮的边距设置为 0,结果也是一样的。
我不能使用 boxView,我需要一个文本并且可以点击它。
问题是,android 按钮具有带边距的默认背景可绘制对象。您可以使用自定义渲染器将其删除。 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 添加到任何视图。
旧线程,但我在我的 Android 平台上得到了这个。将 Xamarin.Forms 从 2.5 升级到最近发布的 3.1 似乎已经解决了这个问题。