Exemple #1
0
        public async Task ClosingFlyoutWithOtherFlyoutBelowHasCorrectWindowCommandsColor(
            FlyoutTheme underLyingFlyoutTheme, FlyoutTheme upperFlyoutTheme)
        {
            await TestHost.SwitchToAppThread();

            var window = await TestHelpers.CreateInvisibleWindowAsync <FlyoutWindow>();

            window.RightFlyout.Theme  = underLyingFlyoutTheme;
            window.RightFlyout2.Theme = upperFlyoutTheme;

            window.RightFlyout.IsOpen  = true;
            window.RightFlyout2.IsOpen = true;

            window.RightFlyout2.IsOpen = false;

            var expectedBrushColor = default(Color);

            switch (window.RightFlyout.ActualTheme)
            {
            case Theme.Dark:
                expectedBrushColor = ((SolidColorBrush)ThemeManager.DarkResource["BlackBrush"]).Color;
                break;

            case Theme.Light:
                expectedBrushColor = ((SolidColorBrush)ThemeManager.LightResource["BlackBrush"]).Color;
                break;
            }

            window.AssertWindowCommandsColor(expectedBrushColor);
        }
        private static void ChangeAllWindowButtonCommandsBrush(this CrystalWindow window, Brush? foregroundBrush, Theme? currentAppTheme, FlyoutTheme flyoutTheme = FlyoutTheme.Adapt, Position position = Position.Top)
        {
            if (position == Position.Right || position == Position.Top)
              {
            if (foregroundBrush is null)
            {
              window.WindowButtonCommands?.ClearValue(Control.ForegroundProperty);
            }

            // set the theme based on color lightness
            // otherwise set the theme based on current application or window theme
            var theme = currentAppTheme != null && currentAppTheme.BaseColorScheme == ThemeManager.BaseColorDark
            ? ThemeManager.BaseColorDark
            : ThemeManager.BaseColorLight;

            theme = flyoutTheme switch
            {
              FlyoutTheme.Light => ThemeManager.BaseColorLight,
              FlyoutTheme.Dark => ThemeManager.BaseColorDark,
              FlyoutTheme.Inverse => theme == ThemeManager.BaseColorLight ? ThemeManager.BaseColorDark : ThemeManager.BaseColorLight,
              _ => theme
            };

            window.WindowButtonCommands?.SetValue(WindowButtonCommands.ThemeProperty, theme);

            // clear or set the foreground property
            if (foregroundBrush != null)
            {
              window.WindowButtonCommands?.SetValue(Control.ForegroundProperty, foregroundBrush);
            }
              }
        }
Exemple #3
0
 public FlyoutDefaultViewModel(string header, Position position, string tag, FlyoutTheme theme = FlyoutTheme.Accent, bool isOpen = false)
 {
     Header   = header;
     Position = position;
     Tag      = tag;
     Theme    = theme;
     IsOpen   = isOpen;
 }
Exemple #4
0
        public void AddFlyout(string name, Type viewType, Position position, UnloadBehavior unloadBehavior = UnloadBehavior.SaveAndCloseViewModel, FlyoutTheme flyoutTheme = FlyoutTheme.Adapt)
        {
            Argument.IsNotNullOrWhitespace(() => name);
            Argument.IsNotNull(() => viewType);

            Log.Info("Adding flyout '{0}' with view type '{1}'", name, viewType.FullName);

            var content = (UIElement)_typeFactory.CreateInstance(viewType);

            var flyout = new Flyout();
            flyout.Theme = flyoutTheme;
            flyout.Position = position;

            var flyoutInfo = new FlyoutInfo(flyout, content);

            flyout.SetBinding(Flyout.HeaderProperty, new Binding("ViewModel.Title") { Source = content });

            ((ICompositeCommand)_commandManager.GetCommand("Close")).RegisterAction(() => { flyout.IsOpen = false; });

            flyout.IsOpenChanged += async (sender, e) =>
            {
                if (!flyout.IsOpen)
                {
                    var vmContainer = flyout.Content as IViewModelContainer;
                    if (vmContainer != null)
                    {
                        var vm = vmContainer.ViewModel;
                        if (vm != null)
                        {
                            switch (unloadBehavior)
                            {
                                case UnloadBehavior.CloseViewModel:
                                    await vm.CloseViewModelAsync(null);
                                    break;

                                case UnloadBehavior.SaveAndCloseViewModel:
                                    await vm.SaveAndCloseViewModelAsync();
                                    break;

                                case UnloadBehavior.CancelAndCloseViewModel:
                                    await vm.CancelAndCloseViewModelAsync();
                                    break;

                                default:
                                    throw new ArgumentOutOfRangeException("unloadBehavior");
                            }
                        }
                    }

                    flyout.Content = null;
                    flyout.DataContext = null;
                }
            };

            _flyouts[name] = flyoutInfo;
        }
 public void Run()
 {
     this.currentConfiguration = this.GetOrCreateThemeConfiguration();
     // MahApps.Metro.ThemeManager.InvalidateSystemResourcesOnBackgroundThread = true;
     ApplyConfiguration(this.currentConfiguration);
     using (var reg = new ThemeRegistrySettings())
     {
         FlyoutTheme = reg.FlyoutTheme;
     }
 }
        public void ApplyFlyoutTheme(FlyoutTheme theme)
        {
            FlyoutTheme = theme;

            using (var reg = new ThemeRegistrySettings())
            {
                reg.FlyoutTheme = theme;
            }

            OnFlyoutThemeChanged();
        }
        public void ApplyFlyoutTheme(FlyoutTheme theme)
        {
            FlyoutTheme = theme;

            using (var reg = new ThemeRegistrySettings())
            {
                reg.FlyoutTheme = theme;
            }

            OnFlyoutThemeChanged();
        }
 public void Run()
 {
     currentConfiguration = GetOrCreateThemeConfiguration();
     // MahApps.Metro.ThemeManager.InvalidateSystemResourcesOnBackgroundThread = true;
     ApplyConfiguration(currentConfiguration);
     using (var reg = new ThemeRegistrySettings())
     {
         FlyoutTheme = reg.FlyoutTheme;
     }
 }
Exemple #9
0
        public async Task ClosingFlyoutWithOtherFlyoutBelowHasCorrectWindowCommandsColor(
            FlyoutTheme underLyingFlyoutTheme, FlyoutTheme upperFlyoutTheme)
        {
            await TestHost.SwitchToAppThread();

            var window = await TestHelpers.CreateInvisibleWindowAsync<FlyoutWindow>();
            window.RightFlyout.Theme = underLyingFlyoutTheme;
            window.RightFlyout2.Theme = upperFlyoutTheme;

            window.RightFlyout.IsOpen = true;
            window.RightFlyout2.IsOpen = true;

            window.RightFlyout2.IsOpen = false;

            var expectedBrushColor = default(Color);

            switch (window.RightFlyout.ActualTheme)
            {
                case Theme.Dark:
                    expectedBrushColor = ((SolidColorBrush)ThemeManager.DarkResource["BlackBrush"]).Color;
                    break;

                case Theme.Light:
                    expectedBrushColor = ((SolidColorBrush)ThemeManager.LightResource["BlackBrush"]).Color;
                    break;
            }
            
            window.AssertWindowCommandsColor(expectedBrushColor);
        }
        private static void ChangeAllWindowButtonCommandsBrush(this MetroWindow window, Brush foregroundBrush, ControlzEx.Theming.Theme currentAppTheme, FlyoutTheme flyoutTheme = FlyoutTheme.Adapt, Position position = Position.Top)
        {
            if (position == Position.Right || position == Position.Top)
            {
                if (foregroundBrush == null)
                {
                    window.WindowButtonCommands?.ClearValue(Control.ForegroundProperty);
                }

                // set the theme based on color lightness
                // otherwise set the theme based on current application or window theme
                var theme = currentAppTheme != null && currentAppTheme.BaseColorScheme == ThemeManager.BaseColorDark
                    ? ThemeManager.BaseColorDark
                    : ThemeManager.BaseColorLight;

                if (flyoutTheme == FlyoutTheme.Light)
                {
                    theme = ThemeManager.BaseColorLight;
                }
                else if (flyoutTheme == FlyoutTheme.Dark)
                {
                    theme = ThemeManager.BaseColorDark;
                }
                else if (flyoutTheme == FlyoutTheme.Inverse)
                {
                    theme = theme == ThemeManager.BaseColorLight ? ThemeManager.BaseColorDark : ThemeManager.BaseColorLight;
                }

                window.WindowButtonCommands?.SetValue(WindowButtonCommands.ThemeProperty, theme);

                // clear or set the foreground property
                if (foregroundBrush != null)
                {
                    window.WindowButtonCommands?.SetValue(Control.ForegroundProperty, foregroundBrush);
                }
            }
        }
Exemple #11
0
        public void AddFlyout(string name, Type viewType, Position position, UnloadBehavior unloadBehavior = UnloadBehavior.SaveAndCloseViewModel, FlyoutTheme flyoutTheme = FlyoutTheme.Adapt)
        {
            Argument.IsNotNullOrWhitespace(() => name);
            Argument.IsNotNull(() => viewType);

            Log.Info("Adding flyout '{0}' with view type '{1}'", name, viewType.FullName);

            var content = (UIElement)_typeFactory.CreateInstance(viewType);

            var flyout = new Flyout();

            flyout.Theme    = flyoutTheme;
            flyout.Position = position;

            var flyoutInfo = new FlyoutInfo(flyout, content);

            flyout.SetBinding(Flyout.HeaderProperty, new Binding("ViewModel.Title")
            {
                Source = content
            });

            ((ICompositeCommand)_commandManager.GetCommand("Close")).RegisterAction(() => { flyout.IsOpen = false; });

#pragma warning disable AvoidAsyncVoid
            flyout.IsOpenChanged += async(sender, e) =>
#pragma warning restore AvoidAsyncVoid
            {
                if (!flyout.IsOpen)
                {
                    var vmContainer = flyout.Content as IViewModelContainer;
                    if (vmContainer != null)
                    {
                        var vm = vmContainer.ViewModel;
                        if (vm != null)
                        {
                            switch (unloadBehavior)
                            {
                            case UnloadBehavior.CloseViewModel:
                                await vm.CloseViewModelAsync(null);

                                break;

                            case UnloadBehavior.SaveAndCloseViewModel:
                                await vm.SaveAndCloseViewModelAsync();

                                break;

                            case UnloadBehavior.CancelAndCloseViewModel:
                                await vm.CancelAndCloseViewModelAsync();

                                break;

                            default:
                                throw new ArgumentOutOfRangeException("unloadBehavior");
                            }
                        }
                    }

                    flyout.Content     = null;
                    flyout.DataContext = null;
                }
            };

            _flyouts[name] = flyoutInfo;
        }
Exemple #12
0
        public void AddFlyout(string name, Type viewType, Position position, UnloadBehavior unloadBehavior = UnloadBehavior.SaveAndCloseViewModel, FlyoutTheme flyoutTheme = FlyoutTheme.Adapt)
        {
            Argument.IsNotNullOrWhitespace(() => name);
            Argument.IsNotNull(() => viewType);

            Log.Info("Adding flyout '{0}' with view type '{1}'", name, viewType.FullName);

            var content = (UIElement)_typeFactory.CreateInstance(viewType);

            var flyout = new Flyout();

            flyout.Theme    = flyoutTheme;
            flyout.Position = position;

            var flyoutInfo = new FlyoutInfo(flyout, content);

            // See https://github.com/WildGums/Orchestra/issues/278, we cannot bind this, use workaround for now, see workaround below as well!!!
            //flyout.SetBinding(Flyout.HeaderProperty, new Binding("ViewModel.Title") { Source = content });

            ((ICompositeCommand)_commandManager.GetCommand("Close")).RegisterAction(() => { flyout.IsOpen = false; });

            // ViewModelChanged handler (Workaround for https://github.com/WildGums/Orchestra/issues/278)
            var vmContainer = content as IViewModelContainer;
            EventHandler <EventArgs> viewModelChangedHandler = null;

            viewModelChangedHandler = (sender, e) =>
            {
                var title = vmContainer?.ViewModel?.Title;
                if (!string.IsNullOrWhiteSpace(title))
                {
                    flyout.Dispatcher.BeginInvoke(() =>
                    {
                        flyout.SetCurrentValue(Flyout.HeaderProperty, title);
                    });
                }
            };

            vmContainer.ViewModelChanged += viewModelChangedHandler;

            // IsOpenChanged handler
            RoutedEventHandler isOpenHandler = null;

#pragma warning disable AvoidAsyncVoid
            isOpenHandler = async(sender, e) =>
#pragma warning restore AvoidAsyncVoid
            {
                var vmContainer = flyout.Content as IViewModelContainer;
                var vm          = vmContainer?.ViewModel;

                if (!flyout.IsOpen)
                {
                    if (vm != null)
                    {
                        switch (unloadBehavior)
                        {
                        case UnloadBehavior.CloseViewModel:
                            await vm.CloseViewModelAsync(null);

                            break;

                        case UnloadBehavior.SaveAndCloseViewModel:
                            await vm.SaveAndCloseViewModelAsync();

                            break;

                        case UnloadBehavior.CancelAndCloseViewModel:
                            await vm.CancelAndCloseViewModelAsync();

                            break;

                        default:
                            throw new ArgumentOutOfRangeException(nameof(unloadBehavior));
                        }
                    }

                    flyout.Content     = null;
                    flyout.DataContext = null;

                    flyout.IsOpenChanged         -= isOpenHandler;
                    vmContainer.ViewModelChanged -= viewModelChangedHandler;
                }
            };

            flyout.IsOpenChanged += isOpenHandler;

            _flyouts[name] = flyoutInfo;
        }
        public static void AddFlyout <TView>(this IFlyoutService flyoutService, string name, Position position,
                                             UnloadBehavior unloadBehavior = UnloadBehavior.SaveAndCloseViewModel, FlyoutTheme flyoutTheme = FlyoutTheme.Adapt)
        {
            Argument.IsNotNull(() => flyoutService);

            flyoutService.AddFlyout(name, typeof(TView), position, unloadBehavior, flyoutTheme);
        }