#wpf #xaml
#wpf #xaml
Вопрос:
У меня есть вложенный объект, определенный в xaml. Например, у меня был такой код ( utils:HotkeyCommand
это мой класс MarkupExtension в code-behind):
<dxb:BarButtonItem>
<dxb:BarButtonItem.Command>
<utils:HotkeyCommand />
</dxb:BarButtonItem.Command>
</dxb:BarButtonItem>
который выглядел довольно неуклюже, поэтому я решил переписать его следующим образом (и это сработало нормально):
<dxb:BarButtonItem Command="{utils:HotkeyCommand}" />
После этого я хочу определить некоторые свойства в своем исходном коде:
<dxb:BarButtonItem>
<dxb:BarButtonItem.Command>
<utils:HotkeyCommand CanExecuteNotifier="{StaticResource GeneralEnabled}" Executed="test" Gesture="Ctrl N" />
</dxb:BarButtonItem.Command>
</dxb:BarButtonItem>
Как я могу переписать этот код в одну строку таким же образом?
Я хочу получить что-то вроде следующего (но оно не компилируется). Существуют ли какие-либо правила, которые можно использовать для преобразования одной нотации во вторую?
<dxb:BarButtonItem Command="{utils:HotkeyCommand CanExecuteNotifier={StaticResource GeneralEnabled}, Executed={test}, Gesture={Ctrl N}}" />
Комментарии:
1. Это должно быть возможно с помощью пользовательского расширения разметки. Вы можете начать читать о расширениях разметки здесь: msdn.microsoft.com/en-gb/library/ms747254.aspx .
Ответ №1:
Наконец, я заставил его работать с помощью ответа x0r (куда он делся?)
<dxb:BarButtonItem Command="{utils:HotkeyCommand {StaticResource GeneralEnabled}, Executed=test, Gesture=Ctrl N}" />
В дополнение к удалению скобок мне также пришлось изменить:
- Переход
Executed
от события к свойству, содержащему делегат - Чтобы сделать возможным использование HotkeyCommand из ресурса, мне пришлось создать конструктор в MarkupExtension с параметром, как описано здесь