Xamarin形成边缘

ad1*_*ima 26 xamarin xamarin.forms

我试图在Xamarin.Forms 文档中找到一些边缘模拟.有人知道我们有什么东西或填充物吗?

更新: 为了更好地理解什么是保证金(来自MSDN for WPF): 在此输入图像描述

ad1*_*ima 26

最后!Xamarin Forms 2.2.0包含Margins支持!

以下是具有良好视觉效果的文档. 在此输入图像描述

UPD特别为@AUSTX_RJL保证金价值Thickness,就像在任何其他XAML框架中一样.

您可以Thickness通过设置由逗号或空格分隔的一个,两个或四个值来设置XAML: 与设置"1 2 3 4"相同"1, 2, 3, 4":

  • 1为 Left
  • 2为 Top
  • 3为 Right
  • 4为 Bottom

的领域 Thickness

"1 2" 集:

  • 1 for LeftRightfields
  • 2 for TopBottomfields

"1" 为所有领域设置1 Thickness

  • 这是真正正确的答案.只需更新到最新版本的Xamarin.Forms.我可以确认2.2.0.45这是一个稳定的版本(不是预发行版)Margin属性似乎按预期工作:IE:所有WPF开发人员习惯的方式. (4认同)

Ste*_*oix 15

截至2014-06-05,没有利润Xamarin.Forms.裹在你的内容ContentView,Frame或任何其他布局,并使用Padding属性.

  • 太遗憾了.任何计划? (4认同)
  • 我和他们都在一起.在布局引擎中实现边距就像是一个皮特,因为它为它添加了一个丑陋的层.边距可以(例如)作用于外部(外部)可用空间而不影响视图的原始大小.它涉及到引擎开发人员在不同的布局行为之间做出让步(允许20%的宽度包括或不包括边距等)并打破他们漂亮而简单的引擎.在Xamarin.Forms中实现它将意味着处理所有平台布局API功能和行为. (3认同)

小智 12

 StackLayout components = new StackLayout
        {
            Orientation = StackOrientation.Vertical,
            Spacing=10,
            Padding = new Thickness (10, 10, 10, 20),
            Children = {
                new Label {Text = "Hello"},
                new Label {Text = "World"}
            }
        };  
Run Code Online (Sandbox Code Playgroud)

使用"间距"属性,可以在布局中的所有子视图之间添加空格.

使用Padding属性,您可以在布局的(左侧,顶部,右侧和底部)位置添加空间.

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

using System;
using Xamarin.Forms;

namespace SharedViews
{

/// <summary>
/// Label propertis that will be rendered in native iOS and native Android Renderers.
/// </summary>
public class MyLabel : Label
{
    /// <summary>
    /// The x position of the label.
    /// </summary>
    public static readonly BindableProperty xProperty = BindableProperty.Create<MyLabel,int>(p => p.X,0);

    public int X{
        get{ return (int)base.GetValue(xProperty);}
        set {base.SetValue(xProperty,value);}
    }

    /// <summary>
    /// The y position of the label.
    /// </summary>
    public static readonly BindableProperty yProperty = BindableProperty.Create<MyLabel,int>(p => p.Y,0);

    public int Y{
        get{ return (int)base.GetValue(yProperty);}
        set {base.SetValue(yProperty,value);}
    }

   }
}
Run Code Online (Sandbox Code Playgroud)

2)创建您的iOS和Android渲染器

Android渲染器:

using System;
using Android.Widget;
using Android.Graphics;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;

[assembly: ExportRenderer (typeof (MyLabel), typeof (MyLabelRenderer))]
namespace ChessGame.Android{
/// <summary>
/// Android label renderer:
/// here we set native Android label properties that can't be accessed in xamarin label.
/// </summary>
public class MyLabelRenderer : LabelRenderer
{
    protected override void OnElementChanged (ElementChangedEventArgs<Label> e) {
        base.OnElementChanged (e);
        MyLabel element = (MyLabel)this.Element;
        var nativeLabelView = (TextView)Control;
        nativeLabelView.SetX (element.X);
        nativeLabelView.SetY (element.Y);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)


Jas*_*son 5

Layouts支持Padding属性,该属性适用于Layout中包含的子项.我认为这是他们目前支持的最接近保证金概念的

  var stackLayout = new StackLayout {
    Padding = new Thickness (10, 10, 10, 20),
    Children = {
      new Label {Text = "Hello"},
      new Label {Text = "World"}
    }
  }
Run Code Online (Sandbox Code Playgroud)

  • 我知道填充物.但是如果我们谈论你的样本,我想要在两个标签之间设置间距.当然,我可以将每个标签放在布局中,但这会增加复杂性. (3认同)