예제 #1
0
        /// <summary>
        /// Add module menu into page
        /// </summary>
        /// <param name="container">COntainer</param>
        public virtual void AddModuleMenu(Panel container)
        {
            if (container == null)
            {
                throw new ArgumentNullException("Parameter container is null.");
            }

            var pageHeader = container.Children.FirstOrDefault(x => (x as FrameworkElement).Name == "PageHeader");

            DropShadowPanel ShadowPanel = new DropShadowPanel
            {
                Style = ApplicationBase.Current.Resources["ShadowContent"] as Style,
                HorizontalContentAlignment = HorizontalAlignment.Stretch,
                VerticalContentAlignment   = VerticalAlignment.Stretch
            };

            RelativePanel.SetBelow(ShadowPanel, pageHeader);
            RelativePanel.SetAlignBottomWithPanel(ShadowPanel, true);
            RelativePanel.SetAlignRightWithPanel(ShadowPanel, true);
            RelativePanel.SetAlignLeftWithPanel(ShadowPanel, true);

            Grid ContentGrid = new Grid
            {
                Style = ApplicationBase.Current.Resources["ContentGrid"] as Style
            };

            RowDefinition RowMain        = new RowDefinition();
            RowDefinition MinorUpdateRow = new RowDefinition();

            ValueWhenConverter boolToGridLength = new ValueWhenConverter
            {
                When      = true,
                Value     = new GridLength(50),
                Otherwise = new GridLength(0)
            };

            Binding minorUpdateRowBinding = new Binding
            {
                Source = (DataContext as MainPageVMBase).ShowMinorUpdate,
                Mode   = BindingMode.OneWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Converter           = boolToGridLength
            };

            BindingOperations.SetBinding(MinorUpdateRow, RowDefinition.HeightProperty, minorUpdateRowBinding);

            var MPVMB = DataContext as MainPageVMBase;

            ApplicationBase.Current.PropertyChangedNotifier.RegisterProperty(MinorUpdateRow, RowDefinition.HeightProperty, nameof(MPVMB.ShowMinorUpdate), viewModelType, converter: boolToGridLength);

            ContentGrid.RowDefinitions.Add(RowMain);
            ContentGrid.RowDefinitions.Add(MinorUpdateRow);

            AddMenuList(ContentGrid);
            AddMinorUpdateRow(ContentGrid);

            ShadowPanel.Content = ContentGrid;
            container.Children.Add(ShadowPanel);
        }
예제 #2
0
        /// <summary>
        /// Add command bar into page
        /// </summary>
        /// <param name="container">Container</param>
        protected virtual void AddCommandBar(Panel container)
        {
            CommandBar PageHeader = new CommandBar
            {
                Name   = nameof(PageHeader),
                Style  = ApplicationBase.Current.Resources["PageHeader"] as Style,
                Margin = new Thickness(0, 32, 0, 0)
            };

            AppBarButton AddItem = new AppBarButton()
            {
                Label     = "Add " + (DataContext as ViewModelBase).GetPropertyValue("ModuleName") as string,
                Icon      = new SymbolIcon(Symbol.Add),
                IsEnabled = true,
                Template  = ApplicationBase.Current.Resources["ShadowAppBarButton"] as ControlTemplate,
                Style     = ApplicationBase.Current.Resources["AppBarButtonRevealLabelsOnRightStyle"] as Style,
                Command   = (DataContext as ViewModelBase).GetPropertyValue("AddItemCommand") as ICommand
            };

            ToolTipService.SetToolTip(AddItem, "Add new " + (DataContext as ViewModelBase).GetPropertyValue("ModuleName") as string + " (Ctrl + N)");
            KeyboardAccelerator addItemKeyboardAccelerator = new KeyboardAccelerator()
            {
                Modifiers = VirtualKeyModifiers.Control,
                Key       = VirtualKey.N
            };

            AddItem.KeyboardAccelerators.Add(addItemKeyboardAccelerator);

            AppBarButton SlavePane = new AppBarButton()
            {
                Template = ApplicationBase.Current.Resources["ShadowAppBarButton"] as ControlTemplate,
                Style    = ApplicationBase.Current.Resources["AppBarButtonRevealLabelsOnRightStyle"] as Style,
                Command  = (DataContext as ViewModelBase).GetPropertyValue("ChangePaneVisibilityCommand") as ICommand
            };

            ToolTipService.SetToolTip(SlavePane, "Open/Close slave pane (Ctrl + O)");
            KeyboardAccelerator openSlavePaneKeyboardAccelerator = new KeyboardAccelerator()
            {
                Modifiers = VirtualKeyModifiers.Control,
                Key       = VirtualKey.O
            };

            SlavePane.KeyboardAccelerators.Add(openSlavePaneKeyboardAccelerator);

            Binding slavePaneLabelBinding = new Binding()
            {
                Path                = new PropertyPath(nameof(ColumnDefinition.Width)),
                ElementName         = nameof(slaveFrameCD),
                Mode                = BindingMode.OneWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Converter           = new SlavePaneVisibilityConverter(),
                ConverterParameter  = "text"
            };

            BindingOperations.SetBinding(SlavePane, AppBarButton.LabelProperty, slavePaneLabelBinding);

            Binding slavePaneIconBinding = new Binding()
            {
                Path                = new PropertyPath(nameof(ColumnDefinition.Width)),
                ElementName         = nameof(slaveFrameCD),
                Mode                = BindingMode.OneWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Converter           = new SlavePaneVisibilityConverter(),
                ConverterParameter  = "icon"
            };

            BindingOperations.SetBinding(SlavePane, AppBarButton.IconProperty, slavePaneIconBinding);

            Binding slavePaneIsEnabledBinding = new Binding()
            {
                Source = ((DataContext as ViewModelBase).GetPropertyValue("PivotPanes") as IList).Count,
                Mode   = BindingMode.OneWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Converter           = new IntToBoolConverter()
            };

            BindingOperations.SetBinding(SlavePane, AppBarButton.IsEnabledProperty, slavePaneIsEnabledBinding);
            ApplicationBase.Current.PropertyChangedNotifier.RegisterProperty(SlavePane, AppBarButton.IsEnabledProperty, "PivotPanes", viewModelType, "Count", converter: new IntToBoolConverter());

            AppBarButton SelectItems = new AppBarButton()
            {
                Name     = nameof(SelectItems),
                Template = ApplicationBase.Current.Resources["ShadowAppBarButton"] as ControlTemplate,
                Style    = ApplicationBase.Current.Resources["AppBarButtonRevealLabelsOnRightStyle"] as Style,
                Icon     = new SymbolIcon(Symbol.Bullets),
                Command  = (DataContext as ViewModelBase).GetPropertyValue("ChangeSelectionModeCommand") as ICommand
            };

            Binding selectItemsLabelBinding = new Binding()
            {
                Path                = new PropertyPath(nameof(ListView.SelectionMode)),
                ElementName         = "ModuleData",
                Mode                = BindingMode.OneWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Converter           = new LabelConverter()
            };

            BindingOperations.SetBinding(SelectItems, AppBarButton.LabelProperty, selectItemsLabelBinding);

            ValueWhenConverter SlidableItemIsEnabled = new ValueWhenConverter
            {
                When      = ListViewSelectionMode.Multiple,
                Value     = false,
                Otherwise = true
            };

            Binding selectItemsIsEnabledBinding = new Binding()
            {
                Path                = new PropertyPath(nameof(ListView.SelectionMode)),
                ElementName         = "ModuleData",
                Mode                = BindingMode.OneWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Converter           = SlidableItemIsEnabled
            };

            BindingOperations.SetBinding(SelectItems, AppBarButton.IsEnabledProperty, selectItemsIsEnabledBinding);
            //ToolTipService.SetToolTip(SlavePane, "Open/Close slave pane (Ctrl + O)");
            //KeyboardAccelerator selectItemsKeyboardAccelerator = new KeyboardAccelerator()
            //{
            //    Modifiers = VirtualKeyModifiers.Control,
            //    Key = VirtualKey.X
            //};
            //SlavePane.KeyboardAccelerators.Add(selectItemsKeyboardAccelerator);

            AppBarButton CancelSelectItems = new AppBarButton()
            {
                Name     = nameof(CancelSelectItems),
                Template = ApplicationBase.Current.Resources["ShadowAppBarButton"] as ControlTemplate,
                Style    = ApplicationBase.Current.Resources["AppBarButtonRevealLabelsOnRightStyle"] as Style,
                Icon     = new SymbolIcon(Symbol.Cancel),
                Command  = (DataContext as ViewModelBase).GetPropertyValue("ChangeSelectionModeCommand") as ICommand
            };

            ToolTipService.SetToolTip(SlavePane, "Cancel select items (Esc)");

            KeyboardAccelerator cancelSelectItemsKeyboardAccelerator = new KeyboardAccelerator()
            {
                Key = VirtualKey.Escape
            };

            CancelSelectItems.KeyboardAccelerators.Add(cancelSelectItemsKeyboardAccelerator);

            Binding selectItemsVisibilityBinding = new Binding()
            {
                Path                = new PropertyPath(nameof(AppBarButton.Visibility)),
                ElementName         = nameof(CancelSelectItems),
                Mode                = BindingMode.OneWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Converter           = new InvertVisibilityConverter()
            };

            BindingOperations.SetBinding(SelectItems, AppBarButton.VisibilityProperty, selectItemsVisibilityBinding);

            Binding cancelSelectItemsLabelBinding = new Binding()
            {
                Path                = new PropertyPath(nameof(ListView.SelectionMode)),
                ElementName         = "ModuleData",
                Mode                = BindingMode.OneWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Converter           = new LabelConverter()
            };

            BindingOperations.SetBinding(CancelSelectItems, AppBarButton.LabelProperty, cancelSelectItemsLabelBinding);

            Binding cancelSelectItemsIsEnabledBinding = new Binding()
            {
                Path                = new PropertyPath(nameof(AppBarButton.IsEnabled)),
                ElementName         = nameof(SelectItems),
                Mode                = BindingMode.OneWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Converter           = new InvertBoolConverter()
            };

            BindingOperations.SetBinding(CancelSelectItems, AppBarButton.IsEnabledProperty, cancelSelectItemsIsEnabledBinding);

            ValueWhenConverter SelectItemsMode = new ValueWhenConverter
            {
                When      = ListViewSelectionMode.Multiple,
                Value     = Visibility.Visible,
                Otherwise = Visibility.Collapsed
            };

            Binding cancelSelectItemsVisibilityBinding = new Binding()
            {
                Path                = new PropertyPath(nameof(ListView.SelectionMode)),
                ElementName         = "ModuleData",
                Mode                = BindingMode.OneWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Converter           = SelectItemsMode
            };

            BindingOperations.SetBinding(CancelSelectItems, AppBarButton.VisibilityProperty, cancelSelectItemsVisibilityBinding);

            AppBarButton SelectAllItems = new AppBarButton()
            {
                Name     = nameof(SelectAllItems),
                Label    = "Select all",
                Template = ApplicationBase.Current.Resources["ShadowAppBarButton"] as ControlTemplate,
                Style    = ApplicationBase.Current.Resources["AppBarButtonRevealLabelsOnRightStyle"] as Style,
                Icon     = new SymbolIcon(Symbol.SelectAll),
                Command  = null
            };

            ToolTipService.SetToolTip(SelectAllItems, "Select all (Ctrl + A)");
            KeyboardAccelerator selectAllItemsKeyboardAccelerator = new KeyboardAccelerator()
            {
                Key       = VirtualKey.A,
                Modifiers = VirtualKeyModifiers.Control
            };

            SelectAllItems.KeyboardAccelerators.Add(selectAllItemsKeyboardAccelerator);

            Binding selectAllItemsVisibilityBinding = new Binding()
            {
                Path                = new PropertyPath(nameof(ListView.SelectionMode)),
                ElementName         = "ModuleData",
                Mode                = BindingMode.OneWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Converter           = SelectItemsMode
            };

            BindingOperations.SetBinding(SelectAllItems, AppBarButton.VisibilityProperty, selectAllItemsVisibilityBinding);

            AppBarButton ShareItems = new AppBarButton()
            {
                Name     = nameof(ShareItems),
                Label    = "Share",
                Template = ApplicationBase.Current.Resources["ShadowAppBarButton"] as ControlTemplate,
                Style    = ApplicationBase.Current.Resources["AppBarButtonRevealLabelsOnRightStyle"] as Style,
                Icon     = new SymbolIcon(Symbol.Share),
                Command  = (DataContext as ViewModelBase).GetPropertyValue("ShareItemsCommand") as ICommand
            };

            ToolTipService.SetToolTip(ShareItems, "Share");

            Binding shareItemsCommandParameterBinding = new Binding()
            {
                ElementName         = "ModuleData",
                Mode                = BindingMode.OneWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
            };

            BindingOperations.SetBinding(ShareItems, AppBarButton.CommandParameterProperty, shareItemsCommandParameterBinding);

            Binding shareItemsVisibilityBinding = new Binding()
            {
                Path                = new PropertyPath(nameof(ListView.SelectionMode)),
                ElementName         = "ModuleData",
                Mode                = BindingMode.OneWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Converter           = SelectItemsMode
            };

            BindingOperations.SetBinding(ShareItems, AppBarButton.VisibilityProperty, shareItemsVisibilityBinding);

            AppBarButton RemoveItems = new AppBarButton()
            {
                Name     = nameof(RemoveItems),
                Label    = "Remove items",
                Template = ApplicationBase.Current.Resources["ShadowAppBarButton"] as ControlTemplate,
                Style    = ApplicationBase.Current.Resources["AppBarButtonRevealLabelsOnRightStyle"] as Style,
                Icon     = new SymbolIcon(Symbol.Delete),
                Command  = (DataContext as ViewModelBase).GetPropertyValue("RemoveItemsCommand") as ICommand
            };

            ToolTipService.SetToolTip(RemoveItems, "Remove (Delete)");

            KeyboardAccelerator removeItemsKeyboardAccelerator = new KeyboardAccelerator()
            {
                Key       = VirtualKey.Delete,
                Modifiers = VirtualKeyModifiers.None
            };

            RemoveItems.KeyboardAccelerators.Add(removeItemsKeyboardAccelerator);

            Binding removeItemsCommandParameterBinding = new Binding()
            {
                ElementName         = "ModuleData",
                Mode                = BindingMode.OneWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
            };

            BindingOperations.SetBinding(RemoveItems, AppBarButton.CommandParameterProperty, removeItemsCommandParameterBinding);

            Binding removeItemsVisibilityBinding = new Binding()
            {
                Path                = new PropertyPath(nameof(ListView.SelectionMode)),
                ElementName         = "ModuleData",
                Mode                = BindingMode.OneWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Converter           = SelectItemsMode
            };

            BindingOperations.SetBinding(RemoveItems, AppBarButton.VisibilityProperty, removeItemsVisibilityBinding);

            AppBarButton CreateSecondTile = new AppBarButton()
            {
                Name     = nameof(SelectAllItems),
                Label    = "Select all",
                Template = ApplicationBase.Current.Resources["ShadowAppBarButton"] as ControlTemplate,
                Style    = ApplicationBase.Current.Resources["AppBarButtonRevealLabelsOnRightStyle"] as Style,
                Icon     = new SymbolIcon(Symbol.SelectAll),
                Command  = (DataContext as ViewModelBase).GetPropertyValue("AddStartTileCommand") as ICommand
            };

            ToolTipService.SetToolTip(CreateSecondTile, "Add/Remove second tile");

            Binding createSecondTileLabelBinding = new Binding()
            {
                Source = (DataContext as ViewModelBase).GetPropertyValue("StartTileAdded"),
                Mode   = BindingMode.OneWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Converter           = new SecondaryTileExistConverter(),
                ConverterParameter  = "text"
            };

            BindingOperations.SetBinding(CreateSecondTile, AppBarButton.LabelProperty, createSecondTileLabelBinding);
            ApplicationBase.Current.PropertyChangedNotifier.RegisterProperty(CreateSecondTile, AppBarButton.LabelProperty, "StartTileAdded", viewModelType, converter: new SecondaryTileExistConverter(), converterParameter: "text");

            Binding createSecondTileIconBinding = new Binding()
            {
                Source = (DataContext as ViewModelBase).GetPropertyValue("StartTileAdded"),
                Mode   = BindingMode.OneWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
                Converter           = new SecondaryTileExistConverter(),
                ConverterParameter  = "icon"
            };

            BindingOperations.SetBinding(CreateSecondTile, AppBarButton.IconProperty, createSecondTileIconBinding);
            ApplicationBase.Current.PropertyChangedNotifier.RegisterProperty(CreateSecondTile, AppBarButton.IconProperty, "StartTileAdded", viewModelType, converter: new SecondaryTileExistConverter(), converterParameter: "icon");

            TextBlock title = new TextBlock
            {
                Text  = (DataContext as ViewModelBase).GetPropertyValue("ModuleTitle") as string,
                Style = ApplicationBase.Current.Resources["PageHeaderText"] as Style
            };

            PageHeader.PrimaryCommands.Add(AddItem);
            PageHeader.PrimaryCommands.Add(SlavePane);
            PageHeader.PrimaryCommands.Add(new AppBarSeparator());
            PageHeader.PrimaryCommands.Add(SelectItems);
            PageHeader.PrimaryCommands.Add(CancelSelectItems);
            PageHeader.PrimaryCommands.Add(SelectAllItems);
            PageHeader.PrimaryCommands.Add(ShareItems);
            PageHeader.PrimaryCommands.Add(RemoveItems);
            PageHeader.PrimaryCommands.Add(new AppBarSeparator());
            PageHeader.PrimaryCommands.Add(CreateSecondTile);
            PageHeader.Content = title;
            container.Children.Add(PageHeader);
        }