public IRibbonService AddRibbonControl(IRibbonControl ribbonControl, string ribbonTabItemName, string ribbonGroupBoxName) { Argument.IsNotNull("ribbonTabItemName", ribbonTabItemName); Argument.IsNotNull("ribbonGroupBoxName", ribbonGroupBoxName); RibbonTabItem ribbonTabItem = Ribbon.Tabs.FirstOrDefault(tab => tab.Name.Equals(ribbonTabItemName)); if (ribbonTabItem == null) { string error = string.Format("could not find the RibbonTabItem of name:{0}--AddRibbonControl", ribbonTabItemName); Log.Error(error); return(this); } RibbonGroupBox ribbonGroupBox = null; foreach (var groupBox in ribbonTabItem.Groups) { if (groupBox.Name.Equals(ribbonGroupBoxName)) { ribbonGroupBox = groupBox; break; } } if (ribbonGroupBox == null) { string error = string.Format("could not find the RibbonGroupBox of name:{0}--AddRibbonControl", ribbonGroupBoxName); Log.Error(error); return(this); } return(AddRibbonControl(ribbonControl, ribbonGroupBox)); }
public void Size_Should_Change_On_Group_State_Change_When_Items_Are_Ribbon_Controls() { var ribbonGroupBox = new RibbonGroupBox(); ribbonGroupBox.Items.Add(new Fluent.Button()); using (new TestRibbonWindow(ribbonGroupBox)) { { ribbonGroupBox.State = RibbonGroupBoxState.Small; UIHelper.DoEvents(); Assert.That(ribbonGroupBox.Items.OfType <Fluent.Button>().First().Size, Is.EqualTo(RibbonControlSize.Small)); } { ribbonGroupBox.State = RibbonGroupBoxState.Middle; UIHelper.DoEvents(); Assert.That(ribbonGroupBox.Items.OfType <Fluent.Button>().First().Size, Is.EqualTo(RibbonControlSize.Middle)); } { ribbonGroupBox.State = RibbonGroupBoxState.Large; UIHelper.DoEvents(); Assert.That(ribbonGroupBox.Items.OfType <Fluent.Button>().First().Size, Is.EqualTo(RibbonControlSize.Large)); } } }
/// <summary> /// Applies the layout. /// </summary> /// <param name="groupBox">The group box.</param> /// <param name="control">The control.</param> /// <param name="layout">The layout.</param> public static void ApplyLayout(this RibbonGroupBox groupBox, Control control, IRibbonItemLayout layout) { if (layout.Width > 0) { control.Width = layout.Width; } }
public IRibbonService AddRibbonControl(IRibbonControl ribbonControl, RibbonGroupBox ribbonGroupBox) { Argument.IsNotNull("ribbonControl", ribbonControl); Argument.IsNotNull("ribbonGroupBox", ribbonGroupBox); Argument.IsNotNull("ribbonGroupBox.Name", ribbonGroupBox.Name); ribbonGroupBox.Items.Add(ribbonControl); return(this); }
/// <summary> /// Adds a new button to the specified <see cref="RibbonGroupBox"/>. /// </summary> /// <param name="groupBox">The group box.</param> /// <param name="header">The header.</param> /// <param name="icon">The icon.</param> /// <param name="largeIcon">The large icon.</param> /// <param name="command">The command.</param> /// <returns>The created button.</returns> /// <exception cref="ArgumentNullException">The <paramref header="groupBox"/> is <c>null</c>.</exception> /// <exception cref="ArgumentException">The <paramref header="header"/> is <c>null</c> or whitespace.</exception> /// <exception cref="ArgumentNullException">The <paramref header="command"/> is <c>null</c>.</exception> public static Button AddButton(this RibbonGroupBox groupBox, string header, string icon, string largeIcon, ICommand command) { Argument.IsNotNull("command", command); var button = CreateButtonWithoutCommandBinding(groupBox, header, icon, largeIcon); button.Command = command; return(button); }
/// <inheritdoc /> public override DataTemplate SelectTemplate(object item, DependencyObject container) { var element = (FrameworkElement)container; if (RibbonGroupBox.GetIsCollapsedHeaderContentPresenter(element)) { return((DataTemplate)element.FindResource("Fluent.Ribbon.Templates.RibbonGroupBox.TwoLineHeaderTemplate")); } return((DataTemplate)element.FindResource("Fluent.Ribbon.Templates.RibbonGroupBox.OneLineHeaderTemplate")); }
private void AdjustGroupVisibility(RibbonGroupBox groupBox) { if (groupBox.Items.Count > 0) { groupBox.Visibility = System.Windows.Visibility.Visible; } else { groupBox.Visibility = System.Windows.Visibility.Hidden; } }
private RibbonGroupBox GetLayerRibbonGoupBox() { RibbonGroupBox ribbonGroupBox = new RibbonGroupBox() { Header = "图层" }; ribbonGroupBox.Items.Add(ControlExtensions.GetFluentButton("添加", GetAddLayersCommand(), "pack://application:,,,/EM.GIS.Resources;Component/Images/Add16.png", "pack://application:,,,/EM.GIS.Resources;Component/Images/Add32.png", "添加图层")); ribbonGroupBox.Items.Add(ControlExtensions.GetFluentButton("移除", GetRemoveLayersCommand(), "pack://application:,,,/EM.GIS.Resources;Component/Images/Remove16.png", "pack://application:,,,/EM.GIS.Resources;Component/Images/Remove32.png", "移除图层")); return(ribbonGroupBox); }
private static RibbonGroupBox CreateGroup(RibbonTabItem tab, string name) { var group = new RibbonGroupBox { Name = "{0}{1}Group".FormatWith(tab.Name, name.Replace(" ", "_")), Header = name }; tab.Groups.Add(group); return(group); }
private RibbonGroupBox GetLayerRibbonGoupBox() { RibbonGroupBox ribbonGroupBox = new RibbonGroupBox() { Header = "图层" }; var command = AppManager.CommandFactory.GetAddLayersCommand(Map, Map.Layers); AddButton(command, ribbonGroupBox.Items); command = AppManager.CommandFactory.GetRemoveSelectedLayersCommand(Map); AddButton(command, ribbonGroupBox.Items); return(ribbonGroupBox); }
private static RibbonGroupBox CreateRibbonGroupBox(bool isSharedSizeScope) { var ribbonGroupBox = new RibbonGroupBox { Header = "Test-Header", Height = 94 }; Grid.SetIsSharedSizeScope(ribbonGroupBox, isSharedSizeScope); AddControls(ribbonGroupBox.Items); return(ribbonGroupBox); }
private void AddRibbonTab_OnClick(object sender, RoutedEventArgs e) { var tab = new RibbonTabItem { Header = "Test" }; var group = new RibbonGroupBox(); group.Items.Add(this.CreateRibbonButton()); tab.Groups.Add(group); this.ribbon.Tabs.Add(tab); }
private RibbonGroupBox FindOrCreateGroup(RibbonTabItem tabItem, string header) { var groupBox = tabItem.Groups .FirstOrDefault(g => g.Header.ToString() == header); if (groupBox == null) { groupBox = new RibbonGroupBox(); groupBox.Header = header; tabItem.Groups.Add(groupBox); } return(groupBox); }
/// <summary> /// Creates the button without command binding. /// </summary> /// <param name="groupBox">The group box.</param> /// <param name="header">The header.</param> /// <param name="icon">The icon.</param> /// <param name="largeIcon">The large icon.</param> /// <returns>Button.</returns> /// <exception cref="ArgumentNullException">The <paramref header="groupBox"/> is <c>null</c>.</exception> /// <exception cref="ArgumentException">The <paramref header="header"/> is <c>null</c> or whitespace.</exception> private static Button CreateButtonWithoutCommandBinding(this RibbonGroupBox groupBox, string header, string icon, string largeIcon) { Argument.IsNotNull("groupBox", groupBox); Argument.IsNotNullOrWhitespace("header", header); var button = new Button(); button.Header = header; button.Icon = icon; button.LargeIcon = largeIcon; groupBox.Items.Add(button); return(button); }
public IRibbonService AddRibbonGroupBox(RibbonGroupBox ribbonGroupBox, string ribbonTabItemName) { Argument.IsNotNull("ribbonTabItemName", ribbonTabItemName); Argument.IsNotNull("ribbonGroupBox.Name", ribbonGroupBox.Name); RibbonTabItem ribbonTabItem = Ribbon.Tabs.FirstOrDefault(tab => tab.Name.Equals(ribbonTabItemName)); if (ribbonTabItem == null) { string error = string.Format("could not find the RibbonTabItem of name:{0}--AddRibbonGroupBox", ribbonTabItemName); Log.Error(error); return(this); } ribbonTabItem.Groups.Add(ribbonGroupBox); return(this); }
private RibbonGroupBox GetNavigateRibbonGoupBox() { RibbonGroupBox ribbonGroupBox = new RibbonGroupBox() { Header = "导航" }; ribbonGroupBox.Items.Add(ControlExtensions.GetFluentButton("平移", GetActivePanToolCommand(), "pack://application:,,,/EM.GIS.Resources;Component/Images/Pan16.png", "pack://application:,,,/EM.GIS.Resources;Component/Images/Pan32.png", "平移工具")); ribbonGroupBox.Items.Add(ControlExtensions.GetFluentButton("全图", GetZoomToMaxExtentCommand(), "pack://application:,,,/EM.GIS.Resources;Component/Images/Global16.png", "pack://application:,,,/EM.GIS.Resources;Component/Images/Global32.png", "缩放至全图", RibbonControlSize.Middle)); ribbonGroupBox.Items.Add(ControlExtensions.GetFluentButton("放大", GetActiveZoomInToolCommand(), "pack://application:,,,/EM.GIS.Resources;Component/Images/ZoomIn16.png", "pack://application:,,,/EM.GIS.Resources;Component/Images/ZoomIn32.png", "放大工具", RibbonControlSize.Middle)); ribbonGroupBox.Items.Add(ControlExtensions.GetFluentButton("后退", GetZoomToPreviousViewCommand(), "pack://application:,,,/EM.GIS.Resources;Component/Images/Pre16.png", "pack://application:,,,/EM.GIS.Resources;Component/Images/Pre32.png", "后退至前一视图", RibbonControlSize.Middle)); ribbonGroupBox.Items.Add(ControlExtensions.GetFluentButton("识别", GetActiveIdentifyToolCommand(), "pack://application:,,,/EM.GIS.Resources;Component/Images/Identify16.png", "pack://application:,,,/EM.GIS.Resources;Component/Images/Identify32.png", "识别工具", RibbonControlSize.Middle)); ribbonGroupBox.Items.Add(ControlExtensions.GetFluentButton("缩小", GetActiveZoomOutToolCommand(), "pack://application:,,,/EM.GIS.Resources;Component/Images/ZoomOut16.png", "pack://application:,,,/EM.GIS.Resources;Component/Images/ZoomOut32.png", "缩小工具", RibbonControlSize.Middle)); ribbonGroupBox.Items.Add(ControlExtensions.GetFluentButton("前进", GetZoomToNextViewCommand(), "pack://application:,,,/EM.GIS.Resources;Component/Images/Next16.png", "pack://application:,,,/EM.GIS.Resources;Component/Images/Next32.png", "前进至后一视图", RibbonControlSize.Middle)); return(ribbonGroupBox); }
/// <summary> /// Adds a new button to the specified <see cref="RibbonGroupBox"/>. /// </summary> /// <param name="groupBox">The group box.</param> /// <param name="header">The header.</param> /// <param name="icon">The icon.</param> /// <param name="largeIcon">The large icon.</param> /// <param name="commandName">The command name.</param> /// <param name="commandSource">The command source, can be <c>null</c> to respect the data context.</param> /// <returns>The created button.</returns> /// <exception cref="ArgumentNullException">The <paramref header="groupBox"/> is <c>null</c>.</exception> /// <exception cref="ArgumentException">The <paramref header="header"/> is <c>null</c> or whitespace.</exception> /// <exception cref="ArgumentException">The <paramref header="commandName"/> is <c>null</c> or whitespace.</exception> public static Button AddButton(this RibbonGroupBox groupBox, string header, string icon, string largeIcon, string commandName, object commandSource = null) { Argument.IsNotNullOrWhitespace("commandName", commandName); var button = CreateButtonWithoutCommandBinding(groupBox, header, icon, largeIcon); var commandBinding = new Binding(commandName); if (commandSource != null) { commandBinding.Source = commandSource; } button.SetBinding(ButtonBase.CommandProperty, commandBinding); return(button); }
/// <summary> /// 初始化顶部菜单,内容多少由取决于<see cref="MenuItems"/> /// </summary> private void initTopContentControl() { TopContentControl = new Ribbon() { IsMinimized = true, AutomaticStateManagement = false, CanCustomizeQuickAccessToolBar = false, }; foreach (var menuitem in this.MenuItems) { try { //大tab RibbonTabItem ribbonTabItem = new RibbonTabItem(); ribbonTabItem.Header = menuitem.Header; TopContentControl.Tabs.Add(ribbonTabItem); //每个tab RibbonGroupBox ribbonGroupBox = new RibbonGroupBox(); ribbonTabItem.Groups.Add(ribbonGroupBox); ribbonGroupBox.Header = menuitem.Header.ToString(); //tab里面的内容 foreach (var menuItemChild in menuitem.Items) { Fluent.Button button = new Fluent.Button(); TreeViewItem treeViewItem = menuItemChild as TreeViewItem; var solutionTreeViewItemChild = treeViewItem.Tag as MenuModule; button.Header = treeViewItem.Header; button.ToolTip = treeViewItem.ToolTip; MenuModule module = treeViewItem.Tag as MenuModule; button.Command = this.MenuCommand; button.CommandParameter = menuItemChild; button.LargeIcon = module.Icon ?? @"pack://application:,,,/Solution.Desktop.Resource;component/Images/logo_32X32.ico"; ribbonGroupBox.Items.Add(button); } } catch (Exception ex) { LogHelper.Error("初始化顶部菜单时错误。", ex); } } }
public void Size_Should_Change_On_Group_State_Change_When_Items_Are_Bound() { var items = new List <ItemViewModel> { new ItemViewModel() }; var ribbonGroupBox = new RibbonGroupBox { ItemsSource = items, ItemTemplate = CreateDataTemplateForItemViewModel() }; using (new TestRibbonWindow(ribbonGroupBox)) { { { ribbonGroupBox.State = RibbonGroupBoxState.Small; UIHelper.DoEvents(); } Assert.That(items.First().ControlSize, Is.EqualTo(RibbonControlSize.Small)); } { { ribbonGroupBox.State = RibbonGroupBoxState.Middle; UIHelper.DoEvents(); } Assert.That(items.First().ControlSize, Is.EqualTo(RibbonControlSize.Middle)); } { { ribbonGroupBox.State = RibbonGroupBoxState.Large; UIHelper.DoEvents(); } Assert.That(items.First().ControlSize, Is.EqualTo(RibbonControlSize.Large)); } } }
/// <summary> /// Ensures that a groupbox with the specified header exists. /// </summary> /// <param name="tabItem">The tab item.</param> /// <param name="header">The header.</param> /// <returns>The existing or newlhy created <see cref="RibbonGroupBox"/>.</returns> /// <exception cref="ArgumentNullException">The <paramref header="tabItem"/> is <c>null</c>.</exception> /// <exception cref="ArgumentException">The <paramref header="header"/> is <c>null</c> or whitespace.</exception> public static RibbonGroupBox EnsureGroupBox(this RibbonTabItem tabItem, string header) { Argument.IsNotNull("tabItem", tabItem); Argument.IsNotNullOrWhitespace("header", header); var groupBox = (from ribbonGroup in tabItem.Groups where string.Equals(ribbonGroup.Header, header) select ribbonGroup).FirstOrDefault(); if (groupBox == null) { groupBox = new RibbonGroupBox(); groupBox.Header = header; tabItem.Groups.Add(groupBox); } return(groupBox); }
public void Initialize() { #region RIBBON INITIALIZATION Ribbon ribbon = EstateApi.Api.Ribbon; ResourceDictionary dictionary = new ResourceDictionary(); dictionary.Source = new Uri("MyCompanyModule;component/RibbonControls.xaml", UriKind.Relative); ResourceDictionary tabs = dictionary["Tabs"] as ResourceDictionary; #region LOADING TABS: if (tabs != null) { foreach (string key in tabs.Keys) { RibbonTabItem newTab = tabs[key] as RibbonTabItem; newTab.IsEnabled = false; foreach (RibbonTabItem t in ribbon.Tabs) { if (t.Header == newTab.Header) { while (newTab.Groups.Count != 0) { RibbonGroupBox newGroup = newTab.Groups[0]; newTab.Groups.RemoveAt(0); t.Groups.Add(newGroup); } newTab.IsEnabled = true; break; } } if (!newTab.IsEnabled) { newTab.IsEnabled = true; ribbon.Tabs.Add(newTab); } } } #endregion #endregion }
public void Configure(RibbonGroupBox ribbongroupExternalTools) { ribbongroupExternalTools.Items.Clear(); if (!string.IsNullOrEmpty(XSConfiguration.Instance.Config.ExternalTool1Filename)) { string tool = XSConfiguration.Instance.Config.ExternalTool1Filename; string args = XSConfiguration.Instance.Config.ExternalTool1Arguments; Button btn = new Button(); btn.Header = "(1) " + getAppname(tool); btn.LargeIcon = "/Images/Tools_Hammer_32x32.png"; //getIcon(tool).ToBitmap(); btn.Click += (sender, e) => run(tool, args); ribbongroupExternalTools.Items.Add(btn); } if (!string.IsNullOrEmpty(XSConfiguration.Instance.Config.ExternalTool2Filename)) { string tool = XSConfiguration.Instance.Config.ExternalTool2Filename; string args = XSConfiguration.Instance.Config.ExternalTool2Arguments; Button btn = new Button(); btn.Header = "(2) " + getAppname(tool); btn.LargeIcon = "/Images/Tools_Hammer_32x32.png"; //getIcon(tool).ToBitmap(); btn.Click += (sender, e) => run(tool, args); ribbongroupExternalTools.Items.Add(btn); } if (!string.IsNullOrEmpty(XSConfiguration.Instance.Config.ExternalTool3Filename)) { string tool = XSConfiguration.Instance.Config.ExternalTool3Filename; string args = XSConfiguration.Instance.Config.ExternalTool3Arguments; Button btn = new Button(); btn.Header = "(3) " + getAppname(tool); btn.LargeIcon = "/Images/Tools_Hammer_32x32.png"; //getIcon(tool).ToBitmap(); btn.Click += (sender, e) => run(tool, args); ribbongroupExternalTools.Items.Add(btn); } }
private RibbonGroupBox GetNavigateRibbonGoupBox() { RibbonGroupBox ribbonGroupBox = new RibbonGroupBox() { Header = "导航" }; RibbonControlSize size = RibbonControlSize.Middle; var command = AppManager.CommandFactory.GetActivePanToolCommand(Map); AddButton(command, ribbonGroupBox.Items); command = AppManager.CommandFactory.GetZoomToMaxExtentCommand(Map); AddButton(command, ribbonGroupBox.Items, size); command = AppManager.CommandFactory.GetActiveZoomInToolCommand(Map); AddButton(command, ribbonGroupBox.Items, size); command = AppManager.CommandFactory.GetZoomToPreviousViewCommand(Map); AddButton(command, ribbonGroupBox.Items, size); command = AppManager.CommandFactory.GetActiveIdentifyToolCommand(Map); AddButton(command, ribbonGroupBox.Items, size); command = AppManager.CommandFactory.GetActiveZoomOutToolCommand(Map); AddButton(command, ribbonGroupBox.Items, size); command = AppManager.CommandFactory.GetZoomToNextViewCommand(Map); AddButton(command, ribbonGroupBox.Items, size); return(ribbonGroupBox); }
public static void SetIsGroupFromPage(RibbonGroupBox item, bool value) => item.SetValue(IsGroupFromPageProperty, value);
public static bool GetIsGroupFromPage(RibbonGroupBox item) => (bool)item.GetValue(IsGroupFromPageProperty);
private static void InitializeRibbonButton(MainWindow window, Func <string, ImageSource> getImage, ButtonDefinition button, RibbonGroupBox ribbonGroup) { using (new ProfileSection("Initialize ribbon button")) { ProfileSection.Argument("button", button); ProfileSection.Argument("ribbonGroup", ribbonGroup); ProfileSection.Argument("window", window); ProfileSection.Argument("getImage", getImage); try { // create handler var mainWindowButton = button.Handler; FrameworkElement ribbonButton; ribbonButton = GetRibbonButton(window, getImage, button, ribbonGroup, mainWindowButton); Assert.IsNotNull(ribbonButton, nameof(ribbonButton)); var width = button.Width; double d; if (!string.IsNullOrEmpty(width) && double.TryParse(width, out d)) { ribbonButton.Width = d; } // bind IsEnabled event if (mainWindowButton != null) { ribbonButton.Tag = mainWindowButton; ribbonButton.IsEnabled = mainWindowButton.IsEnabled(window, SelectedInstance); SetIsEnabledProperty(ribbonButton, mainWindowButton); } } catch (Exception ex) { WindowHelper.HandleError($"Plugin Button caused an exception: {button.Label}", true, ex); } } }
private static FrameworkElement GetRibbonButton(MainWindow window, Func <string, ImageSource> getImage, ButtonDefinition button, RibbonGroupBox ribbonGroup, IMainWindowButton mainWindowButton) { Assert.ArgumentNotNull(button, nameof(button)); Assert.ArgumentNotNull(ribbonGroup, nameof(ribbonGroup)); var header = button.Label; var clickHandler = GetClickHandler(mainWindowButton); if (button.Buttons == null || button.Buttons.Length == 0 || button.Buttons.All(x => x == null)) { // create Ribbon Button var imageSource = getImage(button.Image); var fluentButton = new Fluent.Button { Icon = imageSource, LargeIcon = imageSource, Header = header }; fluentButton.Click += clickHandler; ribbonGroup.Items.Add(fluentButton); return(fluentButton); } // create Ribbon Button var splitButton = ribbonGroup.Items.OfType <SplitButton>().SingleOrDefault(x => x.Header.ToString().Trim().EqualsIgnoreCase(header.Trim())); if (splitButton == null) { var imageSource = getImage(button.Image); splitButton = new Fluent.SplitButton { Icon = imageSource, LargeIcon = imageSource, Header = header }; if (mainWindowButton != null) { splitButton.Click += clickHandler; } else { var childrenButtons = new List <KeyValuePair <string, IMainWindowButton> >(); splitButton.Tag = childrenButtons; splitButton.Click += (sender, args) => splitButton.IsDropDownOpen = true; } ribbonGroup.Items.Add(splitButton); } var items = splitButton.Items; Assert.IsNotNull(items, nameof(items)); foreach (var menuItem in button.Buttons) { if (menuItem == null) { continue; } try { var menuHeader = menuItem.Label; if (string.IsNullOrEmpty(menuHeader)) { items.Add(new Separator()); continue; } var largeImage = menuItem.Image; var menuIcon = string.IsNullOrEmpty(largeImage) ? null : getImage(largeImage); var menuHandler = menuItem.Handler; var childrenButtons = splitButton.Tag as ICollection <KeyValuePair <string, IMainWindowButton> >; if (childrenButtons != null) { childrenButtons.Add(new KeyValuePair <string, IMainWindowButton>(menuHeader, menuHandler)); } var menuButton = new Fluent.MenuItem() { Header = menuHeader, IsEnabled = menuHandler?.IsEnabled(window, SelectedInstance) ?? true }; if (menuIcon != null) { menuButton.Icon = menuIcon; } if (menuHandler != null) { // bind IsEnabled event SetIsEnabledProperty(menuButton, menuHandler); menuButton.Click += delegate { try { if (menuHandler.IsEnabled(MainWindow.Instance, SelectedInstance)) { menuHandler.OnClick(MainWindow.Instance, SelectedInstance); RefreshInstances(); } } catch (Exception ex) { WindowHelper.HandleError($"Error during handling menu button click: {menuHandler.GetType().FullName}", true, ex); } }; } items.Add(menuButton); } catch (Exception ex) { WindowHelper.HandleError($"Error during initializing ribbon button: {menuItem.Label}", true, ex); } } return(splitButton); }
public void Opening_And_Closing_DropDown_Should_Not_Change_Size_For_Dynamic_Item_Width() { var ribbonGroupsContainer = new RibbonGroupsContainer { Height = RibbonTabControl.DefaultContentHeight, ReduceOrder = "(MyGroup),(MyGroup),(MyGroup),(MyGroup),(MyGroup),(MyGroup),(MyGroup),(MyGroup),(MyGroup),(MyGroup)" }; var groupBox = new RibbonGroupBox { Name = "MyGroup", BorderBrush = Brushes.Red }; ribbonGroupsContainer.Children.Add(groupBox); var firstInRibbonGallery = new InRibbonGallery { MinItemsInRow = 1, MaxItemsInRow = 5, ItemHeight = 18, GroupBy = "Group", ResizeMode = ContextMenuResizeMode.Both, ItemsSource = this.sampleDataItemsForDynamicWidth }; groupBox.Items.Add(firstInRibbonGallery); var secondInRibbonGallery = new InRibbonGallery { MinItemsInRow = 1, MaxItemsInRow = 5, ItemHeight = 18, GroupBy = "Group", ResizeMode = ContextMenuResizeMode.Both, ItemsSource = this.sampleDataItemsForDynamicWidth }; groupBox.Items.Add(secondInRibbonGallery); using (new TestRibbonWindow(ribbonGroupsContainer)) { UIHelper.DoEvents(); ribbonGroupsContainer.Width = 620; UIHelper.DoEvents(); Assert.That(firstInRibbonGallery.ActualWidth, Is.EqualTo(247)); Assert.That(secondInRibbonGallery.ActualWidth, Is.EqualTo(247)); Assert.That(firstInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3)); Assert.That(secondInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3)); Assert.That(groupBox.ActualWidth, Is.EqualTo(512)); for (var i = 0; i < 5; i++) { UIHelper.DoEvents(); Assert.That(firstInRibbonGallery.ActualWidth, Is.EqualTo(247)); Assert.That(secondInRibbonGallery.ActualWidth, Is.EqualTo(247)); Assert.That(firstInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3)); Assert.That(secondInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3)); Assert.That(groupBox.ActualWidth, Is.EqualTo(512)); // open and close first { firstInRibbonGallery.IsDropDownOpen = true; UIHelper.DoEvents(); Assert.That(firstInRibbonGallery.ActualWidth, Is.EqualTo(247)); Assert.That(secondInRibbonGallery.ActualWidth, Is.EqualTo(247)); Assert.That(firstInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(0)); Assert.That(secondInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3)); Assert.That(groupBox.ActualWidth, Is.EqualTo(512)); firstInRibbonGallery.IsDropDownOpen = false; UIHelper.DoEvents(); Assert.That(firstInRibbonGallery.ActualWidth, Is.EqualTo(247)); Assert.That(secondInRibbonGallery.ActualWidth, Is.EqualTo(247)); Assert.That(firstInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3)); Assert.That(secondInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3)); Assert.That(groupBox.ActualWidth, Is.EqualTo(512)); } // open and close second { secondInRibbonGallery.IsDropDownOpen = true; UIHelper.DoEvents(); Assert.That(firstInRibbonGallery.ActualWidth, Is.EqualTo(247)); Assert.That(secondInRibbonGallery.ActualWidth, Is.EqualTo(247)); Assert.That(firstInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3)); Assert.That(secondInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(0)); Assert.That(groupBox.ActualWidth, Is.EqualTo(512)); secondInRibbonGallery.IsDropDownOpen = false; UIHelper.DoEvents(); Assert.That(firstInRibbonGallery.ActualWidth, Is.EqualTo(247)); Assert.That(secondInRibbonGallery.ActualWidth, Is.EqualTo(247)); Assert.That(firstInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3)); Assert.That(secondInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3)); Assert.That(groupBox.ActualWidth, Is.EqualTo(512)); } ++ribbonGroupsContainer.Width; } UIHelper.DoEvents(); Assert.That(firstInRibbonGallery.ActualWidth, Is.EqualTo(247)); Assert.That(secondInRibbonGallery.ActualWidth, Is.EqualTo(247)); Assert.That(firstInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3)); Assert.That(secondInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(3)); Assert.That(groupBox.ActualWidth, Is.EqualTo(512)); ribbonGroupsContainer.Width = 670; UIHelper.DoEvents(); Assert.That(firstInRibbonGallery.ActualWidth, Is.EqualTo(323)); Assert.That(secondInRibbonGallery.ActualWidth, Is.EqualTo(323)); Assert.That(firstInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(4)); Assert.That(secondInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(4)); Assert.That(groupBox.ActualWidth, Is.EqualTo(664)); ribbonGroupsContainer.Width = 900; UIHelper.DoEvents(); Assert.That(firstInRibbonGallery.ActualWidth, Is.EqualTo(399)); Assert.That(secondInRibbonGallery.ActualWidth, Is.EqualTo(399)); Assert.That(firstInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(5)); Assert.That(secondInRibbonGallery.CurrentGalleryPanelState.GalleryPanel.MaxItemsInRow, Is.EqualTo(5)); Assert.That(groupBox.ActualWidth, Is.EqualTo(816)); } }
/// <summary> /// Create ribbon menus. /// </summary> /// <param name="ribbonMenu"></param> public override void CreateRibbonMenu(Ribbon ribbonMenu) { base.CreateRibbonMenu(ribbonMenu); // in case the tab group is used for multiple vms, prevent multiple tabs beeing created foreach (Fluent.RibbonContextualTabGroup t in ribbonMenu.ContextualGroups) { if (t.Name == "tabGroupExamplePlugin") { exampleTabGroup = t; return; } } // contextual tab, which should only be visible when the example diagram surface is active exampleTabGroup = new RibbonContextualTabGroup(); exampleTabGroup.Header = "Example Tab Group"; exampleTabGroup.BorderBrush = new SolidColorBrush(System.Windows.Media.Colors.LightBlue); exampleTabGroup.Background = new SolidColorBrush(System.Windows.Media.Colors.LightBlue); exampleTabGroup.Name = "tabGroupExamplePlugin"; // create ribbon bar and associate it with the contextual group RibbonTabItem exampleTab = new RibbonTabItem(); exampleTab.Header = "Example View Operations"; exampleTab.Group = exampleTabGroup; // Analyze group RibbonGroupBox analyzeGroup = new RibbonGroupBox(); analyzeGroup.Header = "Analyze"; exampleTab.Groups.Add(analyzeGroup); Fluent.Button buttonAnalyze = new Fluent.Button(); buttonAnalyze.Text = "Analyze"; buttonAnalyze.Command = this.command; buttonAnalyze.Size = RibbonControlSize.Large; buttonAnalyze.LargeIcon = GetImage("prepare_32.png"); analyzeGroup.Items.Add(buttonAnalyze); // View group RibbonGroupBox viewGroup = new RibbonGroupBox(); viewGroup.Header = "View"; exampleTab.Groups.Add(viewGroup); Fluent.ToggleButton buttonTree = new Fluent.ToggleButton(); buttonTree.Text = "Tree"; buttonTree.LargeIcon = GetImage("tree-32.png"); viewGroup.Items.Add(buttonTree); Fluent.ToggleButton buttonTable = new Fluent.ToggleButton(); buttonTable.Text = "Table"; buttonTable.LargeIcon = GetImage("table-32.png"); viewGroup.Items.Add(buttonTable); // Export group RibbonGroupBox exportGroup = new RibbonGroupBox(); exportGroup.Header = "Export"; exampleTab.Groups.Add(exportGroup); Fluent.Button buttonExportCSV = new Fluent.Button(); buttonExportCSV.Text = "Export as CSV-File"; buttonExportCSV.Size = RibbonControlSize.Large; buttonExportCSV.LargeIcon = GetImage("csv_32x32.png"); buttonExportCSV.Command = this.command; exportGroup.Items.Add(buttonExportCSV); Fluent.Button buttonExportHTML = new Fluent.Button(); buttonExportHTML.Text = "Export as HTML Website"; buttonExportHTML.Size = RibbonControlSize.Large; buttonExportHTML.LargeIcon = GetImage("html_32x32.png"); buttonExportHTML.Command = this.command; exportGroup.Items.Add(buttonExportHTML); Fluent.Button buttonExportPDF = new Fluent.Button(); buttonExportPDF.Text = "Export as PDF Document"; buttonExportPDF.Size = RibbonControlSize.Large; buttonExportPDF.LargeIcon = GetImage("pdf_32x32.png"); buttonExportPDF.Command = this.command; exportGroup.Items.Add(buttonExportPDF); ribbonMenu.ContextualGroups.Add(exampleTabGroup); ribbonMenu.Tabs.Add(exampleTab); }
private static FrameworkElement GetRibbonButton(MainWindow window, Func <string, ImageSource> getImage, XmlElement button, RibbonGroupBox ribbonGroup, IMainWindowButton mainWindowButton) { var header = button.GetNonEmptyAttribute("label"); var clickHandler = GetClickHandler(mainWindowButton); if (button.ChildNodes.Count == 0) { // create Ribbon Button var imageSource = getImage(button.GetNonEmptyAttribute("largeImage")); var fluentButton = new Fluent.Button { Icon = imageSource, LargeIcon = imageSource, Header = header }; fluentButton.Click += clickHandler; ribbonGroup.Items.Add(fluentButton); return(fluentButton); } // create Ribbon Button var splitButton = ribbonGroup.Items.OfType <SplitButton>().SingleOrDefault(x => Extensions.EqualsIgnoreCase(x.Header.ToString().Trim(), header.Trim())); if (splitButton == null) { var imageSource = getImage(button.GetNonEmptyAttribute("largeImage")); splitButton = new Fluent.SplitButton { Icon = imageSource, LargeIcon = imageSource, Header = header }; if (mainWindowButton != null) { splitButton.Click += clickHandler; } else { var childrenButtons = new List <KeyValuePair <string, IMainWindowButton> >(); splitButton.Tag = childrenButtons; splitButton.Click += (sender, args) => splitButton.IsDropDownOpen = true; } ribbonGroup.Items.Add(splitButton); } var items = splitButton.Items; Assert.IsNotNull(items, nameof(items)); foreach (var menuItem in button.ChildNodes.OfType <XmlElement>()) { if (menuItem == null) { continue; } try { var name = menuItem.Name; if (name.EqualsIgnoreCase("separator")) { items.Add(new Separator()); continue; } if (!name.EqualsIgnoreCase("button")) { Log.Error($"This element is not supported as SplitButton element: {menuItem.OuterXml}"); continue; } var menuHeader = menuItem.GetAttribute("label"); var largeImage = menuItem.GetAttribute("largeImage"); var menuIcon = string.IsNullOrEmpty(largeImage) ? null : getImage(largeImage); var menuHandler = (IMainWindowButton)Plugin.CreateInstance(menuItem); Assert.IsNotNull(menuHandler, nameof(menuHandler)); var childrenButtons = splitButton.Tag as ICollection <KeyValuePair <string, IMainWindowButton> >; if (childrenButtons != null) { childrenButtons.Add(new KeyValuePair <string, IMainWindowButton>(menuHeader, menuHandler)); } var menuButton = new Fluent.MenuItem() { Header = menuHeader, IsEnabled = menuHandler.IsEnabled(window, SelectedInstance) }; if (menuIcon != null) { menuButton.Icon = menuIcon; } // bind IsEnabled event SetIsEnabledProperty(menuButton, menuHandler); menuButton.Click += delegate { try { if (menuHandler.IsEnabled(MainWindow.Instance, SelectedInstance)) { menuHandler.OnClick(MainWindow.Instance, SelectedInstance); MainWindowHelper.RefreshInstances(); } } catch (Exception ex) { WindowHelper.HandleError("Error during handling menu button click: " + menuHandler.GetType().FullName, true, ex); } }; items.Add(menuButton); } catch (Exception ex) { WindowHelper.HandleError("Error during initializing ribbon button: " + menuItem.OuterXml, true, ex); } } return(splitButton); }