Xamarin 沙马林形成边缘

Xamarin 沙马林形成边缘,xamarin,xamarin.forms,Xamarin,Xamarin.forms,我想在Xamarin.Forms中找到一些类似的页边距。有人知道我们只有什么东西或填充物吗 更新: 为了更好地了解利润率(来自WPF的MSDN): 布局支持应用于布局中包含的子级的属性。我认为这是他们目前支持的最接近保证金的概念 var stackLayout=新的stackLayout{ 衬垫=新厚度(10,10,10,20), 儿童={ 新标签{Text=“Hello”}, 新标签{Text=“World”} } } 截至2014-06-05,Xamarin.表格中没有空白。将内容包装在Co

我想在Xamarin.Forms中找到一些类似的页边距。有人知道我们只有什么东西或填充物吗

更新: 为了更好地了解利润率(来自WPF的MSDN):

布局支持应用于布局中包含的子级的属性。我认为这是他们目前支持的最接近保证金的概念

var stackLayout=新的stackLayout{
衬垫=新厚度(10,10,10,20),
儿童={
新标签{Text=“Hello”},
新标签{Text=“World”}
}
}

截至2014-06-05,Xamarin.表格中没有空白。将内容包装在
ContentView
Frame
或任何其他布局中,并使用
Padding
属性。

StackLayout components=new StackLayout
{
方向=堆叠方向。垂直,
间距=10,
衬垫=新厚度(10,10,10,20),
儿童={
新标签{Text=“Hello”},
新标签{Text=“World”}
}
};  
使用“间距”特性,可以在布局中的所有子视图之间添加间距

使用Padding属性,可以在布局的(左、上、右和下)位置添加空间

如果希望每个标签子视图具有不同的边距,可以执行以下操作。 1) 创建并使用自定义标签,如下所示:

使用系统;
使用Xamarin.Forms;
命名空间共享视图
{
/// 
///标记将在本机iOS和本机Android渲染器中渲染的属性。
/// 
公共类MyLabel:标签
{
/// 
///标签的x位置。
/// 
公共静态只读BindableProperty xProperty=BindableProperty.Create(p=>p.X,0);
公共整数X{
获取{return(int)base.GetValue(xProperty);}
set{base.SetValue(xProperty,value);}
}
/// 
///标签的y位置。
/// 
公共静态只读BindableProperty yProperty=BindableProperty.Create(p=>p.Y,0);
公共智力{
获取{return(int)base.GetValue(yProperty);}
set{base.SetValue(yProperty,value);}
}
}
}
2) 创建iOS和android渲染器

Android渲染器:

使用系统;
使用Android.Widget;
使用Android.Graphics;
使用Xamarin.Forms;
使用Xamarin.Forms.Platform.Android;
[程序集:ExportRenderer(typeof(MyLabel)、typeof(MyLabelRenderer))]
名称空间棋盘游戏{
/// 
///Android标签渲染器:
///在这里,我们设置无法在xamarin标签中访问的本机Android标签属性。
/// 
公共类MyLabelRenderer:LabelRenderer
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e){
碱基。一个元素改变(e);
MyLabel元素=(MyLabel)this.element;
var nativeLabelView=(TextView)控件;
nativeLabelView.SetX(element.X);
nativeLabelView.SetY(element.Y);
}
}
}

这里是Xamarin.Forms.View的扩展,用于向任何项目添加填充:

public static class XamarinFormsUtil
{
    public static View WithPadding(this View view, double all)
    {
        return WithPadding (view, all, all, all, all);
    }

    public static View WithPadding(this View view, double left, double top, double right, double bottom)
    {
        return new Frame () {
            Content = view,
            Padding = new Thickness(left, top, right, bottom)
        };
    }
}
引用此静态类后,现在可以在构造函数内创建页面内容,为方便起见,请使用WithPadding:

Content = new StackLayout () {
    Orientation = StackOrientation.Vertical,
    Children = {
        welcome.WithPadding(10),
        stars.WithPadding(10),
        starCount.WithPadding(10)
    }
};
终于!包括支持

视觉效果很好。

UPD专为@AUSTX\u RJL设计 边距值与任何其他XAML框架中的值一样

通过设置一个、两个或四个以逗号或空格分隔的值,可以在XAML中设置厚度:
“1 2 3 4”
“1,2,3,4”
相同,并设置:

  • 左<代码>为1
  • 2对于
    顶部
  • 3代表
    右侧
  • 4用于
    底部
厚度
的字段

“12”
设置:

  • 1用于
    左侧
    右侧
    字段
  • 2用于
    顶部
    底部
    字段

“1”
厚度的所有字段设置1

边距-控制控件之间的间距。
填充-控制父控件与其子控件之间的间距


正如@ad1dima所述,Xamarin forms 2.2(于4月27日发布)引入了保证金。您可以在

上找到有关边距属性的文档,我知道填充。但如果我们谈论你的样品,我想设置两个标签之间的间距。当然,我可以把每个标签放在布局中,但这增加了复杂性。真遗憾。有什么计划吗?我完全同意。在布局引擎中实现边距是一种pita,因为它会给它添加一个丑陋的层。边距可能(例如)作用于外部可用空间,而不会影响视图的原始大小。它涉及到引擎开发人员在不同的布局行为之间做出让步(是否允许20%的宽度包括裕度,等等),并打破他们漂亮而简单的引擎。在Xamarin.Forms中实现它将意味着处理所有平台布局API特性和行为。我为否决投票表示歉意。有必要将这个答案推到更新的、被接受的、澄清目前存在保证金支持的答案之下。(我最初没有注意到这个答案,因为它不在顶部。)@ToolmakerSteve这很好如果你想添加分隔符,请看这里:所有这些都是用于儿童布局的。利润率是另一种方式。例如,如果有边距,您将能够在StackLayout中为不同的子级获得不同的剩余空间。或者孩子之间的间隔不同。如果没有边距,您必须将每个子视图放到单独的容器中才能到达该容器。@ad1Dima是的,您是对的,所有子视图都应用了间距和填充。因此,如果希望每个标签子视图具有不同的边距,可以使用LabelRenderer。我将编辑答案以显示这一点。正如我所看到的,这是填充而不是边距。我说的对吗?这是真正正确的答案。只需更新至Xamarin.Forms的最新版本。我可以确认2.2.0.45