2011-08-10 3 views
0

私はRIBBONボタンを動的に構築したい。 RIBBONボタンをクリックするたびに、ユーザーコントロールを開く必要があります。ボタンに付けられたコマンドは、すべてのボタンで同じです。 実行されたプロシージャでは、アクションをアクティブ化したRibbonButtonが必要です。動的にRIBBONを構築する:e.OriginalSourceはもはやタイプではない:RibbonButton

「実行」コマンドは次のようになります。

private void ExecTmp(object sender, ExecutedRoutedEventArgs e) 
    { 
     RibbonButton btn = e.OriginalSource as RibbonButton; 
     Console.WriteLine("===========e.Orig: " + e.OriginalSource.ToString()); 
     // do something with 'btn' 
    } 

、奇妙なことがあれば、焦点はリボンを残さないように、それが動作することです。 タブ(textBlockなど)でuserControlを入力してから、もう一度ribbonButtonをクリックすると、RibbonButtonにアクセスできなくなります。これは、e.originalSourceがRibbonButtonではなくtextBoxであることを私のコンソールで見ることができます。私のコンソール上の出力は次のようになります。開かれたのTabControlに私はRibbonButtonに、私はTabControlのを開いた場合、TabControlの中にコンボボックスをクリックすることを確認することができ、デバッガで

===========e.Orig: Microsoft.Windows.Controls.Ribbon.RibbonButton 
===========e.Orig: System.Windows.Controls.TextBox: 0 
===========e.Orig: System.Windows.Controls.TextBox: 0 
===========e.Orig: System.Windows.Controls.TextBox: 0 

、e.Sourceポイントとe.OriginalSourceはComboBoxを指します。これは奇妙ではないですか?

誰かがこれを説明できますか?

答えて

0

私は少しこの質問のために遅れています:)しかし、とにかく、私の答えが他の誰かのために役立つことを願っています。

リボンコントロールにはFocusManager.IsFocusScope="False"を設定します。これにより、e.OriginalSourceにはRibbonButtonが含まれ、TextBoxにはなりません。

関連する問題