Xamarin 沙马林形成边缘
我想在Xamarin.Forms中找到一些类似的页边距。有人知道我们只有什么东西或填充物吗 更新: 为了更好地了解利润率(来自WPF的MSDN): 布局支持应用于布局中包含的子级的属性。我认为这是他们目前支持的最接近保证金的概念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
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