WPF - как расширить (или работать параллельно) встроенный механизм команд? - PullRequest
4 голосов
/ 18 января 2010

Пожалуйста, извините, если это глупый вопрос - я прочитал дюжину статей об инфраструктуре команд WPF, и я запутался как никогда.

Я понимаю, что могу использовать встроенные команды для реализации (например) панели инструментов, которая будет применять стандартные функции вырезания / копирования / вставки к любому выделенному текстовому полю:

<ToolBar>
    <Button Command="{x:Static ApplicationCommands.Cut}">Cut</Button>
    <Button Command="{x:Static ApplicationCommands.Copy}">Copy</Button>
    <Button Command="{x:Static ApplicationCommands.Paste}">Paste</Button>
</ToolBar>

Но я хочу расширить этот шаблон, чтобы можно было использовать одну панель инструментов для вызова аналогичных (но не идентичных) операций с рядом различных элементов управления. Например, я мог бы создать собственный элемент управления, производный от ListBox, который также поддерживает операции вырезания, копирования и вставки. Хотя выполнение операции копирования в ListBox будет кодироваться иначе, чем в TextBox, оно все равно будет вызываться из той же кнопки панели инструментов.

Итак, мои вопросы:

[1] Что необходимо реализовать в пользовательском элементе управления, чтобы его можно было командовать, как в приведенном выше примере? В частности, он должен быть обнаружен на панели инструментов при фокусировке.

[2] Какая разметка требуется на панели инструментов, чтобы одна кнопка могла вызывать разные команды, в зависимости от типа элемента управления, на который сфокусировано?

Большое спасибо за любой совет, который вы можете предложить.

Тим

1 Ответ

0 голосов
/ 02 марта 2011

Общие RelayCommands с MVVM Pattern - лучший способ создать приложение WPF.Вы можете прочитать об этом здесь .Эти команды можно привязать к любому элементу управления, указав текст данных в качестве класса существования команд.

Разметка будет просто использовать ключевое слово Binding вместо x: Static.

Дайте мне знать, еслиэто решит ваш запрос.

Sushant.

...