C# RibbonControlsLibrary-如何禁用最小化?

C# RibbonControlsLibrary-如何禁用最小化?,c#,.net,wpf,ribboncontrolslibrary,C#,.net,Wpf,Ribboncontrolslibrary,如何从RibbonControlsLibrary中禁用最小化Ribbon控件?最小化控件且无法禁用的唯一方法是双击选项卡标题,事实上,三次或两次以上的单击也会最小化控件,这就是我的第一个想法失败的原因(我试图取消双击事件,但控件在第三次单击时最小化) 因此,此解决方案不太漂亮,但效果很好,当在选项卡HeaderItemsControl上检测到两次以上的单击时(这是保存选项卡的控件),控件将最大化 public class MinimizableRibbon : Ribbon { publ

如何从RibbonControlsLibrary中禁用最小化Ribbon控件?

最小化控件且无法禁用的唯一方法是双击选项卡标题,事实上,三次或两次以上的单击也会最小化控件,这就是我的第一个想法失败的原因(我试图取消双击事件,但控件在第三次单击时最小化)

因此,此解决方案不太漂亮,但效果很好,当在
选项卡HeaderItemsControl
上检测到两次以上的单击时(这是保存选项卡的控件),控件将最大化

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; }
}
公共类最小化功能区:功能区
{
应用程序模板()上的公共重写无效
{
base.OnApplyTemplate();
RibbonTabHeaderItemsControl tabItems=this.FindName(“TabHeaderItemsControl”)作为RibbonTabHeaderItemsControl;
int lastClickTime=0;
if(tabItems!=null)
tabItems.PreviewMouseDown+=(10;,e)=>
{
//连续单击(>=2次单击使控件最小化)
如果(Environment.TickCount-lastClickTime<300)
//在这里,控制应该最小化
如果(!Isminimable)
IsMinimized=false;
lastClickTime=Environment.TickCount;
};
}
公共布尔是最小的{get;set;}
}

以下操作为我禁用了双击选项卡标题和关联菜单上的“最小化功能区”:

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;
    }
}

这非常有效,除非必须在静态构造函数中调用OverrideMetadata。否则XAML设计器将不会加载我的功能区。我认为此特定实现不可行。OverrideMetadata必须在静态构造函数中调用。否则XAML设计器将不会加载我的功能区。
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;
    }
}