Xaml Xamarin表单:如何向按钮添加填充?

Xaml Xamarin表单:如何向按钮添加填充?,xaml,xamarin,mono,xamarin.ios,xamarin.forms,Xaml,Xamarin,Mono,Xamarin.ios,Xamarin.forms,我有以下XAML Xamarin.Forms.Button <Button Text="Cancel" BackgroundColor="#3079a8" TextColor="White" /> 我试图通过padding属性向其添加填充,但没有成功。在查看论坛和文档后,我意识到Xamarin.Forms.Button的文档中没有填充属性 ,是否有其他类型的快速修复方法可以为按钮添加多一点填充?如能提供代码示例,将不胜感激 更新: 填充已添加到Xamarin.Forms v3.

我有以下XAML Xamarin.Forms.Button

<Button Text="Cancel" BackgroundColor="#3079a8" TextColor="White" />

我试图通过padding属性向其添加填充,但没有成功。在查看论坛和文档后,我意识到Xamarin.Forms.Button的文档中没有填充属性
,是否有其他类型的快速修复方法可以为按钮添加多一点填充?如能提供代码示例,将不胜感激

更新:

填充已添加到Xamarin.Forms v3.2中的+

<Button Padding="10,20,10,20" />

旧版:

最好的方法是增加按钮的大小


然后根据需要对齐文本。不幸的是,这是你能做的最好的。如果文本中心对齐,效果会很好。如果按钮左对齐或右对齐,则不会太多。

您可以将按钮包装在StackLayout中,并在StackLayout中添加填充


用法:

<controls:EnhancedButton Padding="1,2,3,4"/>
使用效果而不是渲染器的解决方案,以便于多个控件的使用: XAML:


PCL:

[程序集:ResolutionGroupName(“ComponentName”)]
名称空间XamTest
{
公共类填充效果:路由效果
{
/// 
受保护的PaddingEffect(字符串effectId):基($“ComponentName.{nameof(PaddingEffect)}”)
{
}
公共厚度填充{get;set;}
}
}
安卓:

[程序集:ResolutionGroupName(“ComponentName”)]
[assembly:ExportEffect(typeof(XamTest.Droid.PaddingEffect),“PaddingEffect”)]
名称空间XamTest.Droid
{
公共类填充效果:平台效果
{
/// 
受保护的覆盖无效附加()
{
if(this.Control!=null)
{
var firstMatch=this.Element.Effects.FirstOrDefault(d=>d是XamTest.PaddingEffect);
if(第一个匹配是XamTest.PaddingEffect)
{
this.Control.SetPadding((int)effect.Padding.Left,(int)effect.Padding.Top,(int)effect.Padding.Right,(int)effect.Padding.Bottom);
}
}
}
/// 
受保护的覆盖无效OnDetached()
{
}
}
}

它在android中对我不起作用。 查看SetPadding函数,我看到控件的最小高度为132,最小宽度为242。 我在中更改了SetPadding函数:

 private void SetPadding()
    {
        var element = Element as ExtendedButton;
        if (element != null)
        {
            Control.SetMinHeight(-1);
            Control.SetMinimumHeight(-1);
            Control.SetMinWidth(-1);
            Control.SetMinimumWidth(-1);
            Control.SetPadding(
                (int)element.Padding.Left,
                (int)element.Padding.Top - 6,
                (int)element.Padding.Right,
                (int)element.Padding.Bottom - 6);
        }
    }

你能做的最简单的事情就是


记得我吗

[使用xamarin表单非常令人头痛:'(]

在iOS中,您可以使用简单的自定义渲染器为按钮添加一些填充:

[assembly: ExportRenderer(typeof(Button), typeof(iOSButtonRenderer))]
namespace My.App.iOS.Renderers.Button
{
    /// <summary>
    /// A custom renderer that adds a bit of padding to either side of a button
    /// </summary>
    public class iOSButtonRenderer : ButtonRenderer
    {
        public iOSButtonRenderer() { }

        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
        {
            base.OnElementChanged(e);
            Control.ContentEdgeInsets = new UIEdgeInsets(Control.ContentEdgeInsets.Top, Control.ContentEdgeInsets.Left + 10, Control.ContentEdgeInsets.Bottom, Control.ContentEdgeInsets.Right + 10);
        }
    }
}
[程序集:导出渲染器(typeof(Button)、typeof(iOSButtonRenderer))]
命名空间My.App.iOS.Renderers.Button
{
/// 
///自定义渲染器,在按钮的任一侧添加一点填充
/// 
公共类iOSButtonRenderer:ButtonRenderer
{
public iOSButtonRenderer(){}
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
Control.ContentEdgeInsets=新的UIEdgeInsets(Control.ContentEdgeInsets.Top,Control.ContentEdgeInsets.Left+10,Control.ContentEdgeInsets.Bottom,Control.ContentEdgeInsets.Right+10);
}
}
}

这可能是必需的,但在按钮周围添加填充将使其成为边距。这将在按钮上添加边距,但不添加填充。在stacklayout按钮中,将占据总的stacklayout宽度。根据需要移动控件。最佳答案。谢谢。我还需要添加
xmlns:controls=“clr命名空间:YOURNAMESPACE;assembly=YOURNAMESPACE"
到根xaml元素。通用BindableProperty.Create在Xamarin Forms 2.0中已贬值。请使用非通用BindableProperty.Create:@ChrisC确实正确-已相应更改。出于某种原因,这对我不起作用。如果有任何区别,请使用材质主题。你必须创建一个“增强型”在Xamarin表单中,一个按钮到一个奇怪的按钮添加填充。这是我使用过的最贫乏、最有缺陷的框架。就好像它的作者从来没有用过它做任何事情一样。作为一个框架开发人员,你不可能测试一个按钮,看到完全没有空格,并且认为可以发布它。为了澄清一下,作者要求这是一个填充的快速修复方法。当然,您可以使用渲染器进行更深入的操作。另外,按钮上的填充至少正在与XF团队讨论。不过,尚不确定是否会实现。
<StackLayout  Margin="0,20,0,0" Orientation="Horizontal" Spacing="20"> 
        <Switch VerticalOptions="CenterAndExpand"  ></Switch>
        <Label VerticalOptions="CenterAndExpand" TextColor="White">Remember Me</Label>
        <StackLayout  HorizontalOptions="FillAndExpand"><Button VerticalOptions="CenterAndExpand" HorizontalOptions="FillAndExpand" Text="Sign In" TextColor="White" BackgroundColor="#5cb85c"  ></Button>
        </StackLayout>
</StackLayout>
[assembly: ExportRenderer(typeof(Button), typeof(iOSButtonRenderer))]
namespace My.App.iOS.Renderers.Button
{
    /// <summary>
    /// A custom renderer that adds a bit of padding to either side of a button
    /// </summary>
    public class iOSButtonRenderer : ButtonRenderer
    {
        public iOSButtonRenderer() { }

        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e)
        {
            base.OnElementChanged(e);
            Control.ContentEdgeInsets = new UIEdgeInsets(Control.ContentEdgeInsets.Top, Control.ContentEdgeInsets.Left + 10, Control.ContentEdgeInsets.Bottom, Control.ContentEdgeInsets.Right + 10);
        }
    }
}