【问题标题】:StackLayout inside StackLayout creates overflowStackLayout 内的 StackLayout 创建溢出
【发布时间】:2019-05-19 07:52:51
【问题描述】:

我正在创建一个菜单,这是场景:

(我只是隐藏了项目名称)

所以这是代码:

public Menu(List<Document> documents, MenuItem parent) {
        ParentItem = parent;

        Orientation = StackOrientation.Vertical;
        HorizontalOptions = LayoutOptions.FillAndExpand;
        VerticalOptions = LayoutOptions.FillAndExpand;
        Spacing = 0;
        Margin = new Thickness(0);
        Padding = new Thickness(0);

        if (documents.Count > 0)
            foreach (Document doc in documents)
                AddItem(new MenuItem(doc, this));
    }

public MenuItem(Document doc, Menu parent) {
        Orientation = StackOrientation.Vertical;
        HorizontalOptions = LayoutOptions.FillAndExpand;
        VerticalOptions = LayoutOptions.Start;
        BackgroundColor = Color.Transparent;
        Spacing = 0;
        Margin = new Thickness(0);
        Padding = new Thickness(0);

        Document = doc;

        Parent = parent;
        Head = new MenuItemHead(doc);
        var bdy = new StackLayout() {
            Orientation = StackOrientation.Vertical,
            HorizontalOptions = LayoutOptions.FillAndExpand,
            BackgroundColor = Color.Transparent,
            Spacing = 0,
            Margin = new Thickness(0),
            Padding = new Thickness(15, 0, 0, 0)
        };
        bdy.Children.Add(new Menu(doc.Documents, this));
        Body = bdy;

        Active = false;

        if (!doc.IsFolderOpen) {
            var tapped = new TapGestureRecognizer();
            tapped.Tapped += (s, e) => {
                bool wasActive = Active;
                parent.CollapseItems();
                if (!wasActive) Show();
            };
            Head.GestureRecognizers.Add(tapped);
        } else {
            if (doc.Documents.Count > 0) {
                var tapped = new TapGestureRecognizer();
                tapped.Tapped += async (s, e) => {
                    await MenuView.Push(new Menu(doc.Documents, this));
                };
                Head.GestureRecognizers.Add(tapped);
            }
        }
    }

为什么菜单项正文溢出?我不明白,也许我错过了什么。

【问题讨论】:

    标签: c# xaml xamarin xamarin.forms


    【解决方案1】:

    如果您在 Microsoft Docs 中查看 StackLayout

    您会发现您的 StackLayout 的默认间距为 6。

    将间距设置为 0 应该可以解决问题。

    【讨论】:

    • 如果您看到 StackLayout 始终设置为 0 的代码。
    • 如果您检查代码,您还添加了一个 Padding Padding = new Thickness(15, 0, 0, 0) 这可能会导致此问题,因为如果您仔细观察,该填充位于左侧
    • 是的,这是子菜单的水平填充,在图像中你可以看到左边的缩进。但是所有其他填充都为零,我在哪里犯了错误?
    • 据我所知,我可以直接指出没有错误,但我很困惑你为什么不在这里使用列表视图?
    • 这是guide,这是repo
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    相关资源
    最近更新 更多