#wpf #command #ribbon
#wpf #команда #лента
Вопрос:
Я использовал библиотеку Ribbon для WPF для большого проекта. Теперь, когда у меня возникла проблема, которую легко создать. Допустим, у меня есть RibbonButton и я устанавливаю свойство QuickAccessToolBarId. Это позволяет добавить эту кнопку на панель быстрого доступа. Проблема в том, что когда я устанавливаю RibbonButton.DataContext = RibbonButton; и добавьте эту кнопку в панель быстрого доступа, это вызовет исключение переполнения стека. Я отслеживаю эту проблему в библиотеке, но не имею понятия об этом; Я думаю, что какая-то вещь реализована в Microsoft.Windows.Сборка оболочки, в которую я не могу войти.
Я знаю, что это не обычный способ использования DataContext, но я хочу знать, что вызывает наложение стека при добавлении панели быстрого доступа.
Спасибо,
Ответ №1:
Я думаю, что переполнение стека вызвано тем, что вы пытаетесь установить контекст данных для самого элемента управления. Это похоже на то, что вы рекурсивно вызвали какую-то функцию и никогда не выходите из нее.Таким образом, вы создаете бесконечный цикл, и это вызывает переполнение стека. Это не имеет ничего общего с QuickAccessToolBar.
Комментарии:
1. Я думаю, что это одна из причин. Но мы можем успешно настроить элемент управления на его собственный контекст данных, пожалуйста, попробуйте, если вам интересно. Эта проблема возникает только при использовании панели быстрого доступа; так что я думаю, что что-то жестко запрограммировано в событии, добавляющем к этой панели.
2. Я также использовал библиотеку RibbonControl, и с ней возникли проблемы. Она все еще официально не является частью фреймворка… Если у вас нет последней версии, попробуйте ее, это решило многие мои проблемы. [ microsoft.com/downloads/en/… Но имейте в виду, что они удалили из нее класс RibbonCommand, что на самом деле хорошо..
3. На самом деле, я использую октябрьскую версию. Они значительно улучшили API, но эта проблема все еще существует. Теперь я переношу ViewModel в другой класс вместо того, чтобы привязывать его самостоятельно. Я действительно хочу знать, что именно вызывает эту проблему. Спасибо в любом случае.