Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WPF-практика 5 События и команды.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.21 Mб
Скачать

Упражнение 7. Разработка простого блокнота с использованием механизма команд

Мы уже столько потрудились над этим блокнотом, который так наивно назвали простым, что неразумно будет начинать все заново. Проще скопировать полученный проект в новый и там проводить все необходимые изменения. Но трудились мы не для сего блокнота, а ради будущих наших профессиональных успехов (Se La Vi - такова жизнь).

Создание нового проекта из копии существующего

  • Зайдите в проводнике Windows Explorer в каталог решения EventsAndCommands и скопируйте папку Notepad1

  • Переименуйте копию проекта в Notepad2

  • Зайдите внутрь папки Notepad2 и переименуйте файл проекта тоже в Notepad2. Здесь же удалите каталоги obj и bin, которые оболочка вновь создаст при запуске приложения

  • Запустите оболочку, выделите узел решения EventsAndCommands и командой File/Add/Existing Project зарегистрируйте в решении оболочки проект Notepad2

  • Не запуская проект, откройте на редактирование любой файл проекта Notepad2, вызовите жестом Ctrl+H окно замены с указанными на рисунке настройками и сделайте замену по всему проекту

Должно получиться 20 замен.

  • В панели Solution Explorer вызовите контекстное меню для узла проекта Notepad2 и командой Set as StartUp Project назначьте его стартовым

  • Запустите приложение Notepad2 и убедитесь, что все работает как в проекте Notepad1

Краткий анализ задачи

Теперь будем модифицировать этот проект, подгоняя его под использование механизма команд. Но прежде проведем ревизию библиотечных команд, возможно не все из них закрывают наши источники и часть команд придется создавать самим. За основу возьмем источники меню, поскольку там наиболее полно представлены задачи нашего приложения. Интересующие нас библиотечные команды находятся в классе ApplicationCommands пространства имен System.Windows.Input

Сопоставление задач приложения и библиотечных команд

Раздел меню

Задача

Библиотечная команда

Встроенные жесты

Наши жесты

Регулировать доступность ?

File

New

ApplicationCommands.New

Ctrl+N

Ctrl+N

 

Open

ApplicationCommands.Open

Ctrl+O

Ctrl+O

 

Save

ApplicationCommands.Save

Ctrl+S

Ctrl+S

Да

Save As

ApplicationCommands.SaveAs

 

 

 

Page Setup

 

 

 

 

Print Preview

ApplicationCommands.PrintPreview

Ctrl+F2

Ctrl+F2

 

Print

ApplicationCommands.Print

Ctrl+P

Ctrl+P

 

Exit

 

 

 

 

Edit

Undo

ApplicationCommands.Undo

Ctrl+Z

Ctrl+Z

Да

Redo

ApplicationCommands.Redo

Ctrl+Y

Ctrl+Y

Да

Cut

ApplicationCommands.Cut

Ctrl+X

Ctrl+X

Да

Copy

ApplicationCommands.Copy

Ctrl+C

Ctrl+C

Да

Paste

ApplicationCommands.Paste

Ctrl+V

Ctrl+V

Да

Delete

ApplicationCommands.Delete

Del

Del

Да

Find

ApplicationCommands.Find

Ctrl+F

Ctrl+F

 

Find Next

 

 

F3

 

Replace

ApplicationCommands.Replace

Ctrl+H

Ctrl+H

Да

Go To

 

 

Ctrl+G

 

Select All

ApplicationCommands.SelectAll

Ctrl+A

Ctrl+A

Да

Format

Font

 

 

 

 

Word Wrap

 

 

Ctrl+W

 

Help

About

 

 

 

 

Глядя на таблицу, можно сделать следующие выводы для нашего приложения:

  1. Не все задачи имеют библиотечные команды и часть команд придется создать вручную (такие команды называются пользовательскими или настраиваемыми).

  2. Не для всех задач нужно регулировать доступность источников, поэтому эти задачи можно оставить как есть, ничего не меняя, поскольку они у нас работают нормально.

  3. Задачи, которые не имеют библиотечных команд, не требуют регулирования доступности, поэтому их можно оставить как есть и не создавать для них команды. Но мы все-таки их создадим, для тренировки.

  4. Встроенные жесты библиотечных команд и наши жесты совпадают, мы их так подгадали, поэтому, для тренировки, в задачах, к которым мы применим команды, наши жесты можно удалить (а они заменятся на встроенные)

Недостающие команды нужно создавать в процедурном коде. А вот подключать все команды к источникам и связывать с коллекцией CommandBindings окна, пять же для тренировки, будем и в разметке, и в процедурном коде.

Еще раз выпишем те задачи, которые мы будем реализовывать с помощью команд

План задач, которые предстоит реализовать командами

Где присоединить к источнику?

Где привязать к окну?

Задача

Библиотечная команда

Alias (псевдоним)

Жесты

Рег?

Разметка

Разметка

Save

Save

SaveCommand

Ctrl+S

Да

Разметка

Разметка

Page Setup

 

PageSetupCommand

 

Нет

Разметка

Разметка

Undo

Undo

UndoCommand

Ctrl+Z

Да

Разметка

Код

Redo

Redo

RedoCommand

Ctrl+Y

Да

Разметка

Код

Cut

Cut

CutCommand

Ctrl+X

Да

Разметка

Код

Copy

Copy

CopyCommand

Ctrl+C

Да

Код

Разметка

Paste

Paste

PasteCommand

Ctrl+V

Да

Код

Разметка

Delete

Delete

DeleteCommand

Del

Да

Код

Разметка

Find Next

 

FindNextCommand

F3

Да

Код

Код

Replace

Replace

ReplaceCommand

Ctrl+H

Да

Код

Код

Go To

 

GoToCommand

Ctrl+G

Нет

Код

Код

Select All

SelectAll

SelectAllCommand

Ctrl+A

Да

Мы выбрали 12 задач, которые хотим реализовать с помощью команд. Эта табличка будет нашим планом для дальнейшей работы.