Синтаксис вложенных свойств в xaml

#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}" />
 

В дополнение к удалению скобок мне также пришлось изменить:

  1. Переход Executed от события к свойству, содержащему делегат
  2. Чтобы сделать возможным использование HotkeyCommand из ресурса, мне пришлось создать конструктор в MarkupExtension с параметром, как описано здесь