Command 动态构建功能区:e.OriginalSource不再是:RibbonButton类型
我想动态构建功能区按钮。每次单击功能区按钮都必须打开usercontrol。附加到按钮的命令对于所有按钮都是相同的。 在执行的过程中,我需要启动操作的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
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
,而不是文本框