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); } } }
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; }
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 Run() { currentConfiguration = GetOrCreateThemeConfiguration(); // MahApps.Metro.ThemeManager.InvalidateSystemResourcesOnBackgroundThread = true; ApplyConfiguration(currentConfiguration); using (var reg = new ThemeRegistrySettings()) { FlyoutTheme = reg.FlyoutTheme; } }
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); } } }
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; }
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); }