在Xamarin.Forms布局中添加空间?

Ste*_*eAp 8 xamarin xamarin.forms

Xamarin.Forms中为布局添加空间的建议方法是什么?

一种方法是添加一个没有子代框架,如下所示:

new Frame {
    BackgroundColor = Color.White,
    HeightRequest = 1,
    MinimumHeightRequest = 1,
    HasShadow = false
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,HeightRequestMinimumHeightRequest被忽略.

有更好的方法吗?

SKa*_*all 9

您可以将控件放在布局中(如框架,滚动视图,堆栈面板)并使用Padding属性:

        this.stackPanel = new StackLayout () 
        {
            Padding = new Thickness (8, 8)
        };  

        var scrollView = new ScrollView () 
        {
            Content = stackPanel,
            Padding = new Thickness (1, 2, 3, 4)
        };

        var frame = new Frame () 
        {
            Padding = new Thickness (8)
        };
Run Code Online (Sandbox Code Playgroud)

例如,如果你想在两个按钮之间留出空间,我相信这样就可以了.第一个添加10到底部填充,第二个添加10到顶部填充总共20.

        var frame1 = new Frame () 
        {
            Padding = new Thickness (0,0,0,10),
            Content = new Button()
        };

        var frame2 = new Frame () 
        {
            Padding = new Thickness (0,10,0,0),
            Content = new Button()
        };
Run Code Online (Sandbox Code Playgroud)


Ste*_*oix 6

大多数Xamarin.Forms布局支持在元素之间添加空间:

  • StackLayoutSpacing房产,
  • GridRowSpacingColumnSpacing属性,
  • ...

现在,如果你想在特定的地方添加间距,那么它的方法是包括BoxView:

myStackLayout.Children.Add (new BoxView {Color = Color.Transparent, HeightRequest = 5});
Run Code Online (Sandbox Code Playgroud)

您也可以将内容包装在Frame或中ContentView,但它会在内容中添加填充而不是添加空格(尽管效果会相同).


Lay*_*lez 5

我所做的对我来说非常有效:

假设你想在水平 StackLayout 上均匀分布 2 个 Label:

new StackLayout
{
    Orientation = StackOrientation.Horizontal,
    HorizontalOptions=LayoutOptions.CenterAndExpand,
    Spacing = 0, // <- Very important!!
    Children = {
        new Label { Text = "Label 1" },
        new BoxView { HorizontalOptions = LayoutOptions.FillAndExpand }, // <- the clever part
        new Label { Text = "Label 2" }
    }
};
Run Code Online (Sandbox Code Playgroud)

概括

通过插入填充视图之间剩余空间(“FillAndExpand”)的 BoxView,您的视图会显得均匀分布。通过设置Spacing = 0,您的视图之间不会有额外的空间。