Exemple #1
0
        public async Task FlyoutHeaderAdaptsToMinimumHeight()
        {
            await RunShellTest(shell =>
            {
                var layout = new VerticalStackLayout()
                {
                    new Label()
                    {
                        Text = "Flyout Header"
                    }
                };

                layout.MinimumHeightRequest = 30;

                shell.FlyoutHeader         = layout;
                shell.FlyoutHeaderBehavior = FlyoutHeaderBehavior.CollapseOnScroll;
            },
                               async (shell, handler) =>
            {
                await OpenFlyout(handler);
                var flyoutFrame = GetFrameRelativeToFlyout(handler, shell.FlyoutHeader as IView);

                AssertionExtensions.CloseEnough(flyoutFrame.Height, 30);
            });
        }
Exemple #2
0
        public void UpdateRespectsCascadeInputTransparent()
        {
            var layout = new VerticalStackLayout()
            {
                InputTransparent        = true,
                CascadeInputTransparent = true
            };

            var handler = Substitute.For <IViewHandler>();

            layout.Handler = handler;

            var child0 = new Button()
            {
                InputTransparent = false
            };

            layout.Add(child0);

            var child1 = new Button()
            {
                InputTransparent = false
            };

            layout[0] = child1;

            handler.Received(2).UpdateValue(Arg.Is(nameof(Layout.CascadeInputTransparent)));
        }
Exemple #3
0
        public async Task FlyoutContentRenderersWhenFlyoutBehaviorStartsAsLocked()
        {
            SetupBuilder();
            var flyoutContent = new VerticalStackLayout()
            {
                Children = { new Label()
                             {
                                 Text = "Rendered"
                             } }
            };
            var shell = await CreateShellAsync(shell =>
            {
                shell.CurrentItem = new FlyoutItem()
                {
                    Items = { new ContentPage() }
                };
                shell.FlyoutContent  = flyoutContent;
                shell.FlyoutBehavior = FlyoutBehavior.Locked;
            });

            await CreateHandlerAndAddToWindow <ShellHandler>(shell, async (handler) =>
            {
                await OnLayoutPassCompleted(flyoutContent);

                Assert.NotNull(flyoutContent.Handler);
                Assert.True(flyoutContent.Frame.Width > 0);
                Assert.True(flyoutContent.Frame.Height > 0);
            });
        }
Exemple #4
0
        public async Task BasicLoadUnloadingWorks()
        {
            var behavior = new PlatformBehaviorTest();
            var editor   = new Editor();

            editor.Behaviors.Add(behavior);

            IView layout = new VerticalStackLayout()
            {
                Children =
                {
                    editor
                }
            };

            Assert.False(behavior.IsAttached);
            Assert.Equal(0, behavior.AttachedCount);
            Assert.Equal(0, behavior.DetachedCount);

            await CreateHandlerAndAddToWindow <LayoutHandler>(layout, (_) =>
            {
                Assert.True(behavior.IsAttached);
                Assert.Equal(1, behavior.AttachedCount);
                Assert.Equal(0, behavior.DetachedCount);
                return(Task.CompletedTask);
            });

            Assert.False(behavior.IsAttached);
            Assert.Equal(1, behavior.AttachedCount);
            Assert.Equal(1, behavior.DetachedCount);
        }
Exemple #5
0
        public async Task FooterTemplateMeasuresToSetFlyoutWidth()
        {
            SetupBuilder();
            VerticalStackLayout footer = new VerticalStackLayout()
            {
                new Label()
                {
                    Text = "Hello there"
                }
            };

            var shell = await CreateShellAsync(shell =>
            {
                shell.CurrentItem = new FlyoutItem()
                {
                    Items = { new ContentPage() }, Title = "Flyout Item"
                };
                shell.FlyoutBehavior = FlyoutBehavior.Locked;
                shell.FlyoutWidth    = 20;
                shell.FlyoutFooter   = footer;
            });

            await CreateHandlerAndAddToWindow <ShellRenderer>(shell, async (handler) =>
            {
                await OnFrameSetToNotEmpty(footer);
                Assert.True(Math.Abs(20 - footer.Frame.Width) < 1);
                Assert.True(footer.Frame.Height > 0);
            });
        }
Exemple #6
0
        public async Task ContentOffsetsCorrectlyFromAppTitleBar()
        {
            SetupBuilder();
            var flyoutContent = new VerticalStackLayout()
            {
                HorizontalOptions = LayoutOptions.Fill
            };

            var contentPage = new ContentPage()
            {
                Content = new VerticalStackLayout()
            };

            var shell = await InvokeOnMainThreadAsync(() =>
            {
                return(new Shell()
                {
                    FlyoutContent = flyoutContent,
                    CurrentItem = contentPage,
                    FlyoutBehavior = FlyoutBehavior.Locked
                });
            });

            await CreateHandlerAndAddToWindow <ShellHandler>(shell, (handler) =>
            {
                var rootManager = handler.MauiContext.GetNavigationRootManager();

                var position = contentPage.GetLocationRelativeTo(rootManager.AppTitleBar);
                var distance = rootManager.AppTitleBar.ActualHeight - position.Value.Y;
                Assert.True(Math.Abs(distance) < 1);
                return(Task.CompletedTask);
            });
        }
Exemple #7
0
        public async Task FlyoutLockedOffsetsCorrectlyFromContent()
        {
            SetupBuilder();
            var flyoutContent = new VerticalStackLayout()
            {
                HorizontalOptions = LayoutOptions.Fill
            };

            var contentPage = new ContentPage()
            {
                Content = new VerticalStackLayout()
            };

            var shell = await InvokeOnMainThreadAsync(() =>
            {
                return(new Shell()
                {
                    FlyoutContent = flyoutContent,
                    CurrentItem = contentPage,
                    FlyoutBehavior = FlyoutBehavior.Locked
                });
            });

            await CreateHandlerAndAddToWindow <ShellHandler>(shell, (handler) =>
            {
                var position = contentPage.GetLocationRelativeTo(flyoutContent);

                var distance = position.Value.X - flyoutContent.Width;
                Assert.True(Math.Abs(distance) < 1);
                return(Task.CompletedTask);
            });
        }
Exemple #8
0
        public async Task FlyoutItemsRenderWhenFlyoutHeaderIsSet()
        {
            SetupBuilder();
            VerticalStackLayout header = new VerticalStackLayout()
            {
                new Label()
                {
                    Text = "Hello there"
                }
            };

            var shell = await CreateShellAsync(shell =>
            {
                shell.CurrentItem = new FlyoutItem()
                {
                    Items = { new ContentPage() }, Title = "Flyout Item"
                };
                shell.FlyoutHeader = header;
            });

            await CreateHandlerAndAddToWindow <ShellRenderer>(shell, async (handler) =>
            {
                await Task.Delay(100);
                var dl = GetDrawerLayout(handler);
                await OpenFlyout(handler);

                var flyoutContainer = GetFlyoutMenuReyclerView(handler);

                Assert.True(flyoutContainer.MeasuredWidth > 0);
                Assert.True(flyoutContainer.MeasuredHeight > 0);
            });
        }
Exemple #9
0
        public async Task ReAssigninListViewInVSLCrashes()
        {
            SetupBuilder();
            var listView = new ListView()
            {
                ItemTemplate = new DataTemplate(() =>
                {
                    return(new ViewCell()
                    {
                        View = new VerticalStackLayout()
                        {
                            new Label()
                            {
                                Text = "Cat"
                            }
                        }
                    });
                })
            };

            var layout = new VerticalStackLayout()
            {
                listView
            };

            await CreateHandlerAndAddToWindow <LayoutHandler>(layout, async (handler) =>
            {
                listView.ItemsSource = Enumerable.Range(1, 1);
                await Task.Delay(100);
                ValidatePlatformCells(listView);
                listView.ItemsSource = Enumerable.Range(1, 2);
                await Task.Delay(100);
                ValidatePlatformCells(listView);
            });
        }
Exemple #10
0
        void SetupMauiLayout()
        {
            var verticalStack = new VerticalStackLayout()
            {
                Spacing = 5, BackgroundColor = Colors.Purple,
            };

            verticalStack.Add(new Label {
                Text = "The content below is brought to you by Blazor!", FontSize = 24, TextColor = Colors.BlanchedAlmond, HorizontalOptions = LayoutOptions.Center
            });

            var bwv = new BlazorWebView
            {
                // General properties
                BackgroundColor      = Colors.Orange,
                HeightRequest        = 400,
                MinimumHeightRequest = 400,
                VerticalOptions      = LayoutOptions.FillAndExpand,

                // BlazorWebView properties
                HostPage = @"wwwroot/index.html",
            };

            bwv.RootComponents.Add(new RootComponent {
                Selector = "#app", ComponentType = typeof(Main)
            });
            verticalStack.Add(bwv);

            verticalStack.Add(new Label {
                Text = "Thank you for using Blazor and .NET MAUI!", FontSize = 24, TextColor = Colors.BlanchedAlmond, HorizontalOptions = LayoutOptions.Center
            });

            Content = verticalStack;
        }
Exemple #11
0
        public async Task FlyoutCustomContentMargin(Func <Shell, object, string> shellPart)
        {
            var baselineContent = new VerticalStackLayout()
            {
                new Label()
                {
                    Text = "Flyout Layout Part"
                }
            };
            Rect frameWithoutMargin = Rect.Zero;

            // determine the location of the templated content on the screen without a margin
            await RunShellTest(shell =>
            {
                _ = shellPart(shell, baselineContent);
            },
                               async (shell, handler) =>
            {
                await OpenFlyout(handler);
                frameWithoutMargin = GetFrameRelativeToFlyout(handler, baselineContent);
            });

            var content = new VerticalStackLayout()
            {
                new Label()
                {
                    Text = "Flyout Layout Part"
                }
            };
            string partTesting = string.Empty;

            await RunShellTest(shell =>
            {
                content.Margin = new Thickness(20, 30, 0, 30);
                partTesting    = shellPart(shell, content);
            },
                               async (shell, handler) =>
            {
                await OpenFlyout(handler);

                var frameWithMargin = GetFrameRelativeToFlyout(handler, content);
                var leftDiff        = Math.Abs(Math.Abs(frameWithMargin.Left - frameWithoutMargin.Left) - 20);
                var verticalDiff    = Math.Abs(Math.Abs(frameWithMargin.Top - frameWithoutMargin.Top) - 30);

                AssertionExtensions.AssertWithMessage(() =>
                                                      Assert.True(leftDiff < 0.2),
                                                      $"{partTesting} Left Margin Incorrect. Frame w/ margin: {frameWithMargin}. Frame w/o marin : {frameWithoutMargin}"
                                                      );

                AssertionExtensions.AssertWithMessage(() =>
                                                      Assert.True(verticalDiff < 0.2),
                                                      $"{partTesting} Top Margin Incorrect. Frame w/ margin: {frameWithMargin}. Frame w/o marin : {frameWithoutMargin}"
                                                      );
            });
        }
Exemple #12
0
 public NewContent1()
 {
     Content = new VerticalStackLayout
     {
         Children =
         {
             new Label {
                 HorizontalOptions = LayoutOptions.Center, VerticalOptions = LayoutOptions.Center, Text = "Welcome to .NET MAUI!"
             }
         }
     };
 }
        public VerticalStackLayoutGallery()
        {
            var layout = new VerticalStackLayout();

            for (int n = 0; n < 10; n++)
            {
                layout.Add(new Label {
                    Text = $"Label {n} in a vertical stack"
                });
            }

            Content = layout;
        }
Exemple #14
0
        public void IgnoreArrangeWithoutMeasure()
        {
            var layout = new VerticalStackLayout();

            var view = Substitute.For <IView>();

            view.IsMeasureValid.Returns(true);

            layout.Add(view);

            (layout as IFrameworkElement).Arrange(new Rectangle(0, 0, 100, 100));

            view.DidNotReceive().Arrange(Arg.Any <Rectangle>());
        }
Exemple #15
0
        public void ArrangeAfterMeasure()
        {
            var layout = new VerticalStackLayout();

            var view = Substitute.For <IView>();

            view.IsMeasureValid.Returns(true);

            layout.Add(view);

            var size = (layout as IFrameworkElement).Measure(100, 100);

            (layout as IFrameworkElement).Arrange(new Rectangle(0, 0, size.Width, size.Height));

            view.Received().Arrange(Arg.Any <Rectangle>());
        }
Exemple #16
0
        public async Task RemovingFirstItemOfListViewDoesntCrash()
        {
            SetupBuilder();
            ObservableCollection <string> data = new ObservableCollection <string>()
            {
                "cat",
                "dog",
                "catdog"
            };

            var listView = new ListView()
            {
                ItemTemplate = new DataTemplate(() =>
                {
                    return(new ViewCell()
                    {
                        View = new VerticalStackLayout()
                        {
                            new Label()
                        }
                    });
                }),
                ItemsSource = data
            };

            var layout = new VerticalStackLayout()
            {
                listView
            };

            await CreateHandlerAndAddToWindow <LayoutHandler>(layout, async (handler) =>
            {
                await Task.Delay(100);
                ValidatePlatformCells(listView);
                data.RemoveAt(0);
                await Task.Delay(100);
                ValidatePlatformCells(listView);
                data.Insert(1, "new");
                data.Insert(2, "record");
                await Task.Delay(100);
                ValidatePlatformCells(listView);
                data.RemoveAt(0);
                await Task.Delay(100);
                ValidatePlatformCells(listView);
            });
        }
Exemple #17
0
        public async Task FlyoutHeaderCollapsesOnScroll()
        {
            await RunShellTest(shell =>
            {
                Enumerable.Range(0, 100)
                .ForEach(i =>
                {
                    shell.FlyoutHeaderBehavior = FlyoutHeaderBehavior.CollapseOnScroll;
                    shell.Items.Add(new FlyoutItem()
                    {
                        Title = $"FlyoutItem {i}", Items = { new ContentPage() }
                    });
                });

                var layout = new VerticalStackLayout()
                {
                    new Label()
                    {
                        Text = "Header Content"
                    }
                };

                layout.HeightRequest = 250;

                shell.FlyoutHeader = new ScrollView()
                {
                    MinimumHeightRequest = 100,
                    Content = layout
                };
            },
                               async (shell, handler) =>
            {
                await OpenFlyout(handler);
                await Task.Delay(10);

                var initialBox = (shell.FlyoutHeader as IView).GetBoundingBox();

                AssertionExtensions.CloseEnough(250, initialBox.Height, 0.3);

                await ScrollFlyoutToBottom(handler);

                var scrolledBox = (shell.FlyoutHeader as IView).GetBoundingBox();
                AssertionExtensions.CloseEnough(100, scrolledBox.Height, 0.3);
            });
        }
Exemple #18
0
        public void ClearUpdatesParent()
        {
            var layout = new VerticalStackLayout();

            var child0 = new Button();
            var child1 = new Button();

            layout.Add(child0);
            layout.Add(child1);

            Assert.AreEqual(layout, child0.Parent);
            Assert.AreEqual(layout, child1.Parent);

            layout.Clear();

            Assert.Null(child0.Parent);
            Assert.Null(child1.Parent);
        }
Exemple #19
0
        public async Task FlyoutHeaderRendersCorrectSizeWithFlyoutContentSet()
        {
            SetupBuilder();
            VerticalStackLayout header = new VerticalStackLayout()
            {
                new Label()
                {
                    Text = "Flyout Header"
                }
            };

            var shell = await CreateShellAsync(shell =>
            {
                shell.CurrentItem = new FlyoutItem()
                {
                    Items = { new ContentPage() }, Title = "Flyout Item"
                };
                shell.FlyoutHeader = header;

                shell.FlyoutContent = new VerticalStackLayout()
                {
                    new Label()
                    {
                        Text = "Flyout Content"
                    }
                };

                shell.FlyoutFooter = new VerticalStackLayout()
                {
                    new Label()
                    {
                        Text = "Flyout Footer"
                    }
                };
            });

            await CreateHandlerAndAddToWindow <ShellRenderer>(shell, async (handler) =>
            {
                await Task.Delay(100);
                var headerPlatformView = header.ToPlatform();
                var appBar             = headerPlatformView.GetParentOfType <AppBarLayout>();
                Assert.Equal(appBar.MeasuredHeight, headerPlatformView.MeasuredHeight);
            });
        }
Exemple #20
0
        public void BasicContentPage()
        {
            var page = new ContentPage()
            {
                IsPlatformEnabled = true
            };
            var layout = new VerticalStackLayout()
            {
                IsPlatformEnabled = true
            };
            var button = new Button()
            {
                IsPlatformEnabled = true
            };
            var expectedSize = new Size(100, 100);

            var view = Substitute.For <IViewHandler>();

            view.GetDesiredSize(default, default).ReturnsForAnyArgs(expectedSize);
        public async Task LoadedAndUnloadedFireWhenParentRemoved()
        {
            var editor = new Editor();
            var layout = new VerticalStackLayout()
            {
                editor
            };

            var parentLayout = new VerticalStackLayout()
            {
                layout
            };

            int unloaded = 0;
            int loaded   = 0;

            editor.Loaded   += (_, __) => loaded++;
            editor.Unloaded += (_, __) => unloaded++;

            var window = new Window()
            {
                Page = new ContentPage()
                {
                    Content = parentLayout
                }
            };

            parentLayout.Remove(layout);

            Assert.AreEqual(1, loaded);
            Assert.AreEqual(1, unloaded);

            parentLayout.Add(layout);

            Assert.AreEqual(2, loaded);
            Assert.AreEqual(1, unloaded);

            window.Page = null;

            Assert.AreEqual(2, loaded);
            Assert.AreEqual(2, unloaded);
        }
Exemple #22
0
        public void UsingIndexUpdatesParent()
        {
            var layout = new VerticalStackLayout();

            var child0 = new Button();
            var child1 = new Button();

            Assert.Null(child0.Parent);
            Assert.Null(child1.Parent);

            layout.Add(child0);

            Assert.AreEqual(layout, child0.Parent);
            Assert.Null(child1.Parent);

            layout[0] = child1;

            Assert.Null(child0.Parent);
            Assert.AreEqual(layout, child1.Parent);
        }
Exemple #23
0
        public async Task LoadedAndUnloadedFireWhenParentRemoved()
        {
            var editor = new Editor();
            var layout = new VerticalStackLayout()
            {
                editor
            };

            var parentLayout = new VerticalStackLayout()
            {
                layout
            };

            int unloaded = 0;
            int loaded   = 0;

            editor.Loaded   += (_, __) => loaded++;
            editor.Unloaded += (_, __) => unloaded++;

            await CreateHandlerAndAddToWindow <LayoutHandler>(parentLayout, async (handler) =>
            {
                parentLayout.Remove(layout);
                await OnUnloadedAsync(layout);
                await OnUnloadedAsync(editor);

                Assert.Equal(1, loaded);
                Assert.Equal(1, unloaded);

                parentLayout.Add(layout);
                await OnLoadedAsync(layout);
                await OnLoadedAsync(editor);

                Assert.Equal(2, loaded);
                Assert.Equal(1, unloaded);
            });

            await Task.Delay(1000);

            Assert.Equal(2, loaded);
            Assert.Equal(2, unloaded);
        }
Exemple #24
0
        public async Task FlyoutContentSetsCorrectBottomPaddingWhenMinHeightIsSetForFlyoutHeader()
        {
            await RunShellTest(shell =>
            {
                var layout = new VerticalStackLayout()
                {
                    new Label()
                    {
                        Text = "Flyout Header"
                    }
                };

                layout.MinimumHeightRequest = 30;
                shell.FlyoutHeader          = layout;

                shell.FlyoutFooter = new Label()
                {
                    Text = "Flyout Footer"
                };
                shell.FlyoutContent = new VerticalStackLayout()
                {
                    new Label()
                    {
                        Text = "Flyout Content"
                    }
                };
                shell.FlyoutHeaderBehavior = FlyoutHeaderBehavior.CollapseOnScroll;
            },
                               async (shell, handler) =>
            {
                await OpenFlyout(handler);

                var headerFrame  = GetFrameRelativeToFlyout(handler, (IView)shell.FlyoutHeader);
                var contentFrame = GetFrameRelativeToFlyout(handler, (IView)shell.FlyoutContent);
                var footerFrame  = GetFrameRelativeToFlyout(handler, (IView)shell.FlyoutFooter);

                // validate footer position
                AssertionExtensions.CloseEnough(footerFrame.Y, headerFrame.Height + contentFrame.Height);
            });
        }
Exemple #25
0
        public async Task TitleAndTitleViewAreMutuallyExclusive()
        {
            var             window         = new TestWindow();
            IToolbarElement toolbarElement = window;
            var             contentPage    = new ContentPage()
            {
                Title = "Test Title"
            };
            var navigationPage = new NavigationPage(contentPage);

            window.Page = navigationPage;

            var titleView = new VerticalStackLayout();
            var toolbar   = (Toolbar)toolbarElement.Toolbar;

            Assert.AreEqual("Test Title", toolbar.Title);
            NavigationPage.SetTitleView(contentPage, titleView);
            Assert.IsEmpty(toolbar.Title);
            Assert.AreEqual(titleView, toolbar.TitleView);
            NavigationPage.SetTitleView(contentPage, null);
            Assert.AreEqual("Test Title", toolbar.Title);
        }
Exemple #26
0
        public async Task TitleAndTitleViewAreMutuallyExclusive()
        {
            var contentPage = new ContentPage()
            {
                Title = "Test Title"
            };
            var titleView = new VerticalStackLayout();

            TestShell testShell = new TestShell(contentPage);
            var       window    = new Window()
            {
                Page = testShell
            };

            var toolbar = testShell.Toolbar;

            Assert.AreEqual("Test Title", toolbar.Title);
            Shell.SetTitleView(contentPage, titleView);
            Assert.IsEmpty(toolbar.Title);
            Assert.AreEqual(titleView, toolbar.TitleView);
            Shell.SetTitleView(contentPage, null);
            Assert.AreEqual("Test Title", toolbar.Title);
        }
Exemple #27
0
        public async Task FlyoutHeaderMinimumHeight(FlyoutHeaderBehavior behavior)
        {
            await RunShellTest(shell =>
            {
                var layout = new VerticalStackLayout()
                {
                    new Label()
                    {
                        Text = "Flyout Header"
                    }
                };

                shell.FlyoutHeader         = layout;
                shell.FlyoutHeaderBehavior = behavior;
            },
                               async (shell, handler) =>
            {
                await OpenFlyout(handler);
                var flyoutFrame = GetFrameRelativeToFlyout(handler, shell.FlyoutHeader as IView);


                if (behavior == FlyoutHeaderBehavior.CollapseOnScroll)
                {
                    // 56 was pulled from the ActionBar height on Android
                    // and then just used across all three platforms for
                    // the min height when using collapse on scroll
                    AssertionExtensions.CloseEnough(56, flyoutFrame.Height);
                }
                else
                {
                    AssertionExtensions.AssertWithMessage(() =>
                                                          Assert.True(flyoutFrame.Height < 56),
                                                          $"Expected < 56 Actual: {flyoutFrame.Height}"
                                                          );
                }
            });
        }
Exemple #28
0
        public async Task AutoSizeInitializesCorrectly(EditorAutoSizeOption option)
        {
            var editor = new Editor
            {
                AutoSize = option,
                Text     = "Test"
            };

            IView layout = new VerticalStackLayout()
            {
                Children =
                {
                    editor
                }
            };

            await CreateHandlerAndAddToWindow <LayoutHandler>(layout, (_) =>
            {
                layout.Arrange(new Graphics.Rect(Graphics.Point.Zero, layout.Measure(1000, 1000)));
                var initialHeight = editor.Height;

                editor.Text += Environment.NewLine + " Some new text" + Environment.NewLine;
                layout.Arrange(new Graphics.Rect(Graphics.Point.Zero, layout.Measure(1000, 1000)));

                if (option == EditorAutoSizeOption.Disabled)
                {
                    Assert.Equal(initialHeight, editor.Height);
                }
                else
                {
                    Assert.True(initialHeight < editor.Height);
                }

                return(Task.CompletedTask);
            });
        }
Exemple #29
0
        public async Task AutoSizeInitializesCorrectly(EditorAutoSizeOption option)
        {
            var editor = new Editor
            {
                AutoSize = option,
                Text     = "Test"
            };

            IView layout = new VerticalStackLayout()
            {
                Children =
                {
                    editor
                }
            };

            await InvokeOnMainThreadAsync(() =>
            {
                _ = CreateHandler <LayoutHandler>(layout);

                layout.Arrange(new Graphics.Rectangle(Graphics.Point.Zero, layout.Measure(1000, 1000)));
                var initialHeight = editor.Height;

                editor.Text += Environment.NewLine + " Some new text" + Environment.NewLine;
                layout.Arrange(new Graphics.Rectangle(Graphics.Point.Zero, layout.Measure(1000, 1000)));

                if (option == EditorAutoSizeOption.Disabled)
                {
                    Assert.Equal(initialHeight, editor.Height);
                }
                else
                {
                    Assert.True(initialHeight < editor.Height);
                }
            });
        }
Exemple #30
0
        void SetupMauiLayout()
        {
            const string loremIpsum =
                "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " +
                "Quisque ut dolor metus. Duis vel iaculis mauris, sit amet finibus mi. " +
                "Etiam congue ornare risus, in facilisis libero tempor eget. " +
                "Phasellus mattis mollis libero ut semper. In sit amet sapien odio. " +
                "Sed interdum ullamcorper dui eu rutrum. Vestibulum non sagittis justo. " +
                "Cras rutrum scelerisque elit, et porta est lobortis ac. " +
                "Pellentesque eu ornare tortor. Sed bibendum a nisl at laoreet.";

            var verticalStack = new VerticalStackLayout()
            {
                Spacing = 5, BackgroundColor = Color.AntiqueWhite
            };
            var horizontalStack = new HorizontalStackLayout()
            {
                Spacing = 2, BackgroundColor = Color.CornflowerBlue
            };


            verticalStack.Add(CreateSampleGrid());

            verticalStack.Add(new Label {
                Text = " ", Padding = new Thickness(10)
            });
            var label = new Label {
                Text = "End-aligned text", BackgroundColor = Color.Fuchsia, HorizontalTextAlignment = TextAlignment.End
            };

            label.Margin = new Thickness(15, 10, 20, 15);

            verticalStack.Add(label);
            verticalStack.Add(new Label {
                Text = "This should be BIG text!", FontSize = 24, HorizontalOptions = LayoutOptions.End
            });
            verticalStack.Add(new Label {
                Text = "This should be BOLD text!", FontAttributes = FontAttributes.Bold, HorizontalOptions = LayoutOptions.Center
            });
            verticalStack.Add(new Label {
                Text = "This should be a CUSTOM font!", FontFamily = "Dokdo"
            });
            verticalStack.Add(new Label {
                Text = "This should have padding", Padding = new Thickness(40), BackgroundColor = Color.LightBlue
            });
            verticalStack.Add(new Label {
                Text = loremIpsum
            });
            verticalStack.Add(new Label {
                Text = loremIpsum, MaxLines = 2
            });
            verticalStack.Add(new Label {
                Text = loremIpsum, LineBreakMode = LineBreakMode.TailTruncation
            });
            verticalStack.Add(new Label {
                Text = loremIpsum, MaxLines = 2, LineBreakMode = LineBreakMode.TailTruncation
            });
            verticalStack.Add(new Label {
                Text = "This should have five times the line height!", LineHeight = 5
            });

            var visibleClearButtonEntry = new Entry()
            {
                ClearButtonVisibility = ClearButtonVisibility.WhileEditing, Placeholder = "This Entry will show clear button if has input."
            };
            var hiddenClearButtonEntry = new Entry()
            {
                ClearButtonVisibility = ClearButtonVisibility.Never, Placeholder = "This Entry will not..."
            };

            verticalStack.Add(visibleClearButtonEntry);
            verticalStack.Add(hiddenClearButtonEntry);

            verticalStack.Add(new Editor {
                Placeholder = "This is an editor placeholder."
            });
            var paddingButton = new Button
            {
                Padding         = new Thickness(40),
                Text            = "This button has a padding!!",
                BackgroundColor = Color.Purple,
            };

            verticalStack.Add(paddingButton);

            var underlineLabel = new Label {
                Text = "underline", TextDecorations = TextDecorations.Underline
            };

            verticalStack.Add(underlineLabel);

            verticalStack.Add(new ActivityIndicator());
            verticalStack.Add(new ActivityIndicator {
                Color = Color.Red, IsRunning = true
            });

            var button = new Button()
            {
                Text = _viewModel.Text, WidthRequest = 200
            };
            var button2 = new Button()
            {
                TextColor       = Color.Green,
                Text            = "Hello I'm a button",
                BackgroundColor = Color.Purple,
                Margin          = new Thickness(12)
            };

            horizontalStack.Add(button);
            horizontalStack.Add(button2);
            horizontalStack.Add(new Label {
                Text = "And these buttons are in a HorizontalStackLayout", VerticalOptions = LayoutOptions.Center
            });

            verticalStack.Add(horizontalStack);

            verticalStack.Add(new CheckBox());
            verticalStack.Add(new CheckBox {
                BackgroundColor = Color.LightPink
            });
            verticalStack.Add(new CheckBox {
                IsChecked = true, Color = Color.Aquamarine
            });

            verticalStack.Add(new DatePicker());

            verticalStack.Add(new Editor());
            verticalStack.Add(new Editor {
                Text = "Editor"
            });
            verticalStack.Add(new Editor {
                Text = "Lorem ipsum dolor sit amet", MaxLength = 10
            });
            verticalStack.Add(new Editor {
                Text = "Predictive Text Off", IsTextPredictionEnabled = false
            });
            verticalStack.Add(new Editor {
                Text = "Lorem ipsum dolor sit amet", FontSize = 10, FontFamily = "dokdo_regular"
            });
            verticalStack.Add(new Editor {
                Text = "ReadOnly Editor", IsReadOnly = true
            });


            var entry = new Entry();

            entry.TextChanged += (sender, e) =>
            {
                Debug.WriteLine($"Text Changed from '{e.OldTextValue}' to '{e.NewTextValue}'");
            };

            verticalStack.Add(entry);
            verticalStack.Add(new Entry {
                Text = "Entry", TextColor = Color.DarkRed, FontFamily = "Dokdo"
            });
            verticalStack.Add(new Entry {
                IsPassword = true, TextColor = Color.Black
            });
            verticalStack.Add(new Entry {
                IsTextPredictionEnabled = false
            });
            verticalStack.Add(new Entry {
                Placeholder = "This should be placeholder text"
            });
            verticalStack.Add(new Entry {
                Text = "This should be read only property", IsReadOnly = true
            });
            verticalStack.Add(new Entry {
                MaxLength = 5, Placeholder = "MaxLength text"
            });
            verticalStack.Add(new Entry {
                Text = "This should be text with character spacing", CharacterSpacing = 10
            });

            verticalStack.Add(new ProgressBar {
                Progress = 0.5
            });
            verticalStack.Add(new ProgressBar {
                Progress = 0.5, BackgroundColor = Color.LightCoral
            });
            verticalStack.Add(new ProgressBar {
                Progress = 0.5, ProgressColor = Color.Purple
            });

            var searchBar = new SearchBar();

            searchBar.CharacterSpacing = 4;
            searchBar.Text             = "A search query";
            verticalStack.Add(searchBar);

            var placeholderSearchBar = new SearchBar();

            placeholderSearchBar.Placeholder = "Placeholder";
            verticalStack.Add(placeholderSearchBar);


            var monkeyList = new List <string>
            {
                "Baboon",
                "Capuchin Monkey",
                "Blue Monkey",
                "Squirrel Monkey",
                "Golden Lion Tamarin",
                "Howler Monkey",
                "Japanese Macaque"
            };

            var picker = new Picker {
                Title = "Select a monkey"
            };

            picker.ItemsSource = monkeyList;
            verticalStack.Add(picker);

            verticalStack.Add(new Slider());

            verticalStack.Add(new Stepper());
            verticalStack.Add(new Stepper {
                BackgroundColor = Color.IndianRed
            });
            verticalStack.Add(new Stepper {
                Minimum = 0, Maximum = 10, Value = 5
            });

            verticalStack.Add(new Switch());
            verticalStack.Add(new Switch()
            {
                OnColor = Color.Green
            });
            verticalStack.Add(new Switch()
            {
                ThumbColor = Color.Yellow
            });
            verticalStack.Add(new Switch()
            {
                OnColor = Color.Green, ThumbColor = Color.Yellow
            });

            verticalStack.Add(new DatePicker());

            verticalStack.Add(new TimePicker());
            verticalStack.Add(new TimePicker {
                Time = TimeSpan.FromHours(8), CharacterSpacing = 6
            });

            verticalStack.Add(new Image()
            {
                Source = "dotnet_bot.png"
            });

            Content = new ScrollView
            {
                Content = verticalStack
            };
        }