예제 #1
0
        public void Right_Clicking_On_Control_Twice_Re_Opens_ContextMenu()
        {
            using (Application())
            {
                popupImpl.Setup(x => x.Show(true, false)).Verifiable();
                popupImpl.Setup(x => x.Hide()).Verifiable();

                var sut    = new ContextMenu();
                var target = new Panel
                {
                    ContextMenu = sut
                };

                var window = PreparedWindow(target);
                window.Show();

                var overlay = LightDismissOverlayLayer.GetLightDismissOverlayLayer(window);

                _mouse.Click(target, MouseButton.Right);
                Assert.True(sut.IsOpen);

                _mouse.Down(overlay, MouseButton.Right);
                _mouse.Up(target, MouseButton.Right);

                Assert.True(sut.IsOpen);
                popupImpl.Verify(x => x.Hide(), Times.Once);
                popupImpl.Verify(x => x.Show(true, false), Times.Exactly(2));
            }
        }
예제 #2
0
        public void Cancelling_Closing_Leaves_ContextMenuOpen()
        {
            using (Application())
            {
                popupImpl.Setup(x => x.Show(true, false)).Verifiable();
                popupImpl.Setup(x => x.Hide()).Verifiable();

                bool eventCalled = false;
                var  sut         = new ContextMenu();
                var  target      = new Panel
                {
                    ContextMenu = sut
                };

                var window  = PreparedWindow(target);
                var overlay = LightDismissOverlayLayer.GetLightDismissOverlayLayer(window);

                sut.ContextMenuClosing += (c, e) => { eventCalled = true; e.Cancel = true; };

                window.Show();

                _mouse.Click(target, MouseButton.Right);

                Assert.True(sut.IsOpen);

                _mouse.Down(overlay, MouseButton.Right);
                _mouse.Up(target, MouseButton.Right);

                Assert.True(eventCalled);
                Assert.True(sut.IsOpen);

                popupImpl.Verify(x => x.Show(true, false), Times.Once());
                popupImpl.Verify(x => x.Hide(), Times.Never);
            }
        }
예제 #3
0
        public void Light_Dismiss_Closes_Flyout()
        {
            using (CreateServicesWithFocus())
            {
                var window = PreparedWindow();
                window.Width  = 100;
                window.Height = 100;

                var button = new Button
                {
                    Height = 10,
                    Width  = 10,
                    HorizontalAlignment = Layout.HorizontalAlignment.Left,
                    VerticalAlignment   = Layout.VerticalAlignment.Top
                };
                window.Content = button;

                window.Show();

                var f = new Flyout();
                f.Content = new Border {
                    Width = 10, Height = 10
                };
                f.ShowAt(window);

                var e       = CreatePointerPressedEventArgs(window, new Point(90, 90));
                var overlay = LightDismissOverlayLayer.GetLightDismissOverlayLayer(window);
                overlay.RaiseEvent(e);

                Assert.False(f.IsOpen);
            }
        }
예제 #4
0
        public void Cancel_Light_Dismiss_Closing_Keeps_Flyout_Open()
        {
            using (Application())
            {
                popupImpl.Setup(x => x.Show(true, false)).Verifiable();
                popupImpl.Setup(x => x.Hide()).Verifiable();

                var window = PreparedWindow();
                window.Width  = 100;
                window.Height = 100;

                var button = new Button
                {
                    Height = 10,
                    Width  = 10,
                    HorizontalAlignment = Layout.HorizontalAlignment.Left,
                    VerticalAlignment   = Layout.VerticalAlignment.Top
                };
                window.Content = button;

                window.ApplyTemplate();
                window.Show();

                var tracker = 0;

                var c = new ContextMenu();
                c.ContextMenuClosing += (s, e) =>
                {
                    tracker++;
                    e.Cancel = true;
                };
                button.ContextMenu = c;
                c.Open(button);

                var overlay = LightDismissOverlayLayer.GetLightDismissOverlayLayer(window);
                _mouse.Down(overlay, MouseButton.Left, new Point(90, 90));
                _mouse.Up(button, MouseButton.Left, new Point(90, 90));

                Assert.Equal(1, tracker);
                Assert.True(c.IsOpen);

                popupImpl.Verify(x => x.Hide(), Times.Never);
                popupImpl.Verify(x => x.Show(true, false), Times.Exactly(1));
            }
        }
예제 #5
0
        public void OverlayDismissEventPassThrough_Should_Pass_Event_To_Window_Contents()
        {
            using (CreateServices())
            {
                var renderer   = new Mock <IRenderer>();
                var platform   = AvaloniaLocator.Current.GetService <IWindowingPlatform>();
                var windowImpl = Mock.Get(platform.CreateWindow());
                windowImpl.Setup(x => x.CreateRenderer(It.IsAny <IRenderRoot>())).Returns(renderer.Object);

                var window = new Window(windowImpl.Object);
                window.ApplyTemplate();

                var target = new Popup()
                {
                    PlacementTarget                = window,
                    IsLightDismissEnabled          = true,
                    OverlayDismissEventPassThrough = true,
                };

                var raised = 0;
                var border = new Border();
                window.Content = border;

                renderer.Setup(x =>
                               x.HitTestFirst(new Point(10, 15), window, It.IsAny <Func <IVisual, bool> >()))
                .Returns(border);

                border.PointerPressed += (s, e) =>
                {
                    Assert.Same(border, e.Source);
                    ++raised;
                };

                target.Open();
                Assert.True(target.IsOpen);

                var e       = CreatePointerPressedEventArgs(window, new Point(10, 15));
                var overlay = LightDismissOverlayLayer.GetLightDismissOverlayLayer(window);
                overlay.RaiseEvent(e);

                Assert.Equal(1, raised);
                Assert.False(target.IsOpen);
            }
        }
예제 #6
0
        public void Cancel_Light_Dismiss_Closing_Keeps_Flyout_Open()
        {
            using (CreateServicesWithFocus())
            {
                var window = PreparedWindow();
                window.Width  = 100;
                window.Height = 100;

                var button = new Button
                {
                    Height = 10,
                    Width  = 10,
                    HorizontalAlignment = Layout.HorizontalAlignment.Left,
                    VerticalAlignment   = Layout.VerticalAlignment.Top
                };
                window.Content = button;

                window.Show();

                var tracker = 0;
                var f       = new Flyout();
                f.Content = new Border {
                    Width = 10, Height = 10
                };
                f.Closing += (s, e) =>
                {
                    tracker++;
                    e.Cancel = true;
                };
                f.ShowAt(window);

                var e       = CreatePointerPressedEventArgs(window, new Point(90, 90));
                var overlay = LightDismissOverlayLayer.GetLightDismissOverlayLayer(window);
                overlay.RaiseEvent(e);

                Assert.Equal(1, tracker);
                Assert.True(f.IsOpen);
            }
        }
예제 #7
0
        public void Light_Dismiss_Closes_Flyout()
        {
            using (Application())
            {
                popupImpl.Setup(x => x.Show(true, false)).Verifiable();
                popupImpl.Setup(x => x.Hide()).Verifiable();

                var window = PreparedWindow();
                window.Width  = 100;
                window.Height = 100;

                var button = new Button
                {
                    Height = 10,
                    Width  = 10,
                    HorizontalAlignment = Layout.HorizontalAlignment.Left,
                    VerticalAlignment   = Layout.VerticalAlignment.Top
                };
                window.Content = button;

                window.ApplyTemplate();
                window.Show();

                var c = new ContextMenu();
                c.PlacementMode = PlacementMode.Bottom;
                c.Open(button);

                var overlay = LightDismissOverlayLayer.GetLightDismissOverlayLayer(window);
                _mouse.Down(overlay, MouseButton.Left, new Point(90, 90));
                _mouse.Up(button, MouseButton.Left, new Point(90, 90));

                Assert.False(c.IsOpen);
                popupImpl.Verify(x => x.Hide(), Times.Exactly(1));
                popupImpl.Verify(x => x.Show(true, false), Times.Exactly(1));
            }
        }