RibbonControlsLibrary - как отключить минимизацию? - PullRequest
3 голосов
/ 14 сентября 2011

Как отключить свертывание элемента управления ленты из RibbonControlsLibrary?

Ответы [ 3 ]

2 голосов
/ 28 января 2012

Для меня отключены двойной щелчок по заголовку вкладки и «Свернуть ленту» в контекстном меню:

public class ExRibbon : Ribbon
{
    public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();

        IsMinimizedProperty.OverrideMetadata(typeof(ExRibbon),
                new FrameworkPropertyMetadata(false, (o, e) => { }, (o, e) => false));

        Type ownerType = typeof(ExRibbon);
        CommandManager.RegisterClassCommandBinding(ownerType,
            new CommandBinding(RibbonCommands.MinimizeRibbonCommand, null, MinimizeRibbonCanExecute));
    }

    private static void MinimizeRibbonCanExecute(object sender, CanExecuteRoutedEventArgs args)
    {
        args.CanExecute = false;
        args.Handled = true;
    }
}
1 голос
/ 26 сентября 2011
public class ExRibbon : Ribbon
{
    public override void OnApplyTemplate()
    {
         base.OnApplyTemplate();

         if (!IsMinimizable)
         {
              IsMinimizedProperty.OverrideMetadata(typeof(ExRibbon), 
                   new FrameworkPropertyMetadata(false, (o, e) => { }, (o,e) => false));
         }
    }
    public bool IsMinimizable { get; set; }
}
0 голосов
/ 22 сентября 2011

Единственный способ свести к минимуму элемент управления и не может быть отключен - это двойной щелчок по заголовку вкладки, фактически, тройной щелчок или более 2 нажатий также сводит к минимуму элемент управления, поэтому моя первая идея провалилась (я попробовалотменить событие двойного щелчка, но элемент управления свернут при третьем щелчке).

ТАК, это решение не слишком красивое, но оно работает нормально, когда на TabHeaderItemsControl обнаружено более двух нажатий (этоэто элемент управления, который содержит вкладки), то элемент управления максимизируется

public class MinimizableRibbon : Ribbon
{
    public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();

        RibbonTabHeaderItemsControl tabItems = this.FindName("TabHeaderItemsControl") as RibbonTabHeaderItemsControl;

        int lastClickTime = 0;
        if (tabItems != null)
            tabItems.PreviewMouseDown += (_, e) =>
                {
                    // A continuous click was made (>= 2 clicks minimizes the control)
                    if (Environment.TickCount - lastClickTime < 300)
                        // here the control should be minimized
                        if (!IsMinimizable)
                            IsMinimized = false;

                    lastClickTime=Environment.TickCount;
                };
    }

    public bool IsMinimizable { get; set; }
}
...