2011-09-14 11 views

答えて

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; } 
} 
が最大化されます
+0

良い解決策:) – Ariel

+0

私はこの特定の実装が実行可能であるとは思わない。 [MSDNによる](http://msdn.microsoft.com/en-us/library/ms597491%28v=vs.110%29.aspx)、OverrideMetadataは静的なコンストラクタで呼び出される必要があります。さもなければ、XAMLデザイナーは私のリボンをロードしませんでした。 –

0

コントロールを最小限に抑えて無効にできない唯一の方法は、タブのヘッダーをダブルクリックすることです。実際には3回クリックするか2回以上クリックするとコントロールが最小限に抑えられます。ダブルクリックイベントの取り消しを試みましたが、コントロールは3回目のクリックで最小化されました)。

SOこの溶液があまりにpretyではなく、二つ以上のクリックが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; } 
} 
+0

を。 – Rover

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

これは、[MSDNに準拠](http://msdn.microsoft.com/en-us/library/ms597491%28v=vs.110%29.aspx)を除いてうまく動作しますが、OverrideMetadataは静的コンストラクターで呼び出す必要があります。さもなければ、XAMLデザイナーは私のリボンをロードしませんでした。 –

関連する問題