StackLayout внутри StackLayout создает переполнение - PullRequest
0 голосов
/ 18 декабря 2018

Я создаю меню, и это сцена:

enter image description here

(я просто скрываю названия предметов)

Итак, это код:

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);
            }
        }
    }

Почему тело пункта меню переполняется?Я не понимаю, может быть, я что-то упустил.

1 Ответ

0 голосов
/ 19 декабря 2018

Если вы проверите Microsoft Docs для StackLayout

Вы обнаружите, что ваш StackLayout имеет интервал по умолчанию 6.

Установка Spacing на 0 должен сделать трюк для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...