динамическое построение RIBBON: e.OriginalSource больше не имеет типа: RibbonButton - PullRequest
0 голосов
/ 10 августа 2011

Я хочу динамически создавать свои кнопки 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.Разве это не странно?

Кто-нибудь может это объяснить?

1 Ответ

0 голосов
/ 23 июля 2012

Я немного опоздал на этот вопрос :) Но в любом случае надеюсь, что мой ответ будет полезен для кого-то еще.

Установите FocusManager.IsFocusScope="False" для контроля ленты.Это заставит e.OriginalSource содержать RibbonButton, а не TextBox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...