Command 动态构建功能区:e.OriginalSource不再是:RibbonButton类型

Command 动态构建功能区:e.OriginalSource不再是:RibbonButton类型,command,ribbon,Command,Ribbon,我想动态构建功能区按钮。每次单击功能区按钮都必须打开usercontrol。附加到按钮的命令对于所有按钮都是相同的。 在执行的过程中,我需要启动操作的RibbonButton “已执行”命令如下所示: private void ExecTmp(object sender, ExecutedRoutedEventArgs e) { RibbonButton btn = e.OriginalSource as RibbonButton; Console

我想动态构建功能区按钮。每次单击功能区按钮都必须打开usercontrol。附加到按钮的命令对于所有按钮都是相同的。 在执行的过程中,我需要启动操作的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'   
     }
===========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
现在,奇怪的是,只要焦点不离开色带,它就能工作。 如果我在选项卡(文本块或其他东西)上输入userControl,然后再次单击ribbonButton,我将无法再访问ribbonButton。我可以在我的控制台上看到,这是因为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'   
     }
===========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
在调试器中,我可以看到,如果打开tabControl,请单击tabControl中的组合框,然后单击Ribbon按钮,e.Source指向打开的tabControl,e.OriginalSource指向组合框。这不是很奇怪吗


有人能解释一下吗?

我提这个问题有点晚了:)但无论如何,希望我的回答对其他人有用

为功能区控件设置
FocusManager.IsFocusScope=“False”
。这将导致
e.OriginalSource
包含
RibbonButton
,而不是
文本框