Xaml Xamarin表单:如何向按钮添加填充?
我有以下XAML Xamarin.Forms.ButtonXaml 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.
<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);
}
}
}