3

RibbonControlsLibraryからリボンコントロールの最小化を無効にする方法は?

4

3 に答える 3

2

以下は、タブヘッダーのダブルクリックとコンテキストメニューの[リボンの最小化]の両方を無効にしました。

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;
    }
}
于 2012-01-28T13:13:53.450 に答える
1
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; }
}
于 2011-09-26T08:19:27.947 に答える
0

コントロールを最小化して無効にできない唯一の方法は、タブヘッダーをダブルクリックすることです。実際、トリプルクリックまたは2回以上のクリックでもコントロールが最小化されます。これが私の最初のアイデアが失敗した理由です(私はダブルクリックイベントですが、3 回目のクリックでコントロールが最小化されます)。

SO このソリューションはあまりきれいではありませんが、正常に動作します。TabHeaderItemsControl(これはタブを保持するコントロールです) で 2 回以上のクリックが検出された場合、コントロールは最大化 されます。

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; }
}
于 2011-09-22T12:44:11.503 に答える