Я хочу динамически создавать свои кнопки RIBBON.Каждый щелчок на кнопке RIBBON должен приводить к открытию пользовательского контроля.Команда, прикрепленная к кнопке, одинакова для всех кнопок.В выполненной процедуре мне нужна кнопка 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'
}
Теперь странно то, что она работает до тех пор, покатак как фокус не покидает ленту.Если я ввожу пользовательский элемент управления на вкладке (текстовый блок или что-то еще), а затем снова нажимаю кнопку ленты, у меня больше нет доступа к RibbonButton.Я вижу на своей консоли, что причина этого в том, что e.originalSource больше не RibbonButton, а textBox.Вывод на моей консоли выглядит следующим образом:
===========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, а затем на RibbonButton, e.Source указывает на открытыйtabControl и e.OriginalSource указывают на ComboBox.Разве это не странно?
Кто-нибудь может это объяснить?