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

Замена встроенного контекстного меню

  • Запустите приложение и вызовите контекстное меню для элемента редактирования щелчком правой кнопкой мыши или клавиатурным жестом Shift+F10

Мы видим, что элемент редактирования имеет по умолчанию контекстное меню, которое называется встроенным. Некоторые элементы управления имеют встроенное контекстное меню с готовой поддержкой команд.

  • Проверьте, что команды меню и клавиатурные комбинации выполняют операции вырезания и копирования в буфер обмена, а также вставку из буфера. Работает также и встроенная логика отключения источников команд, когда операция невозможна, например, буфер обмена пуст и нечего вставлять

Для тренировки, в дальнейшем мы переопределим встроенное в TextBox контекстное меню и встроенные команды, а заодно и отключим клавиатурные комбинации, инициирующие встроенные команды.

  • Добавьте внутрь дескриптора TextBox разметку контекстного меню с подключенными пиктограммами для элементов

<TextBox.ContextMenu>

<ContextMenu Width="100">

<MenuItem Header="Cu_t" Icon="{StaticResource iconCut}" />

<MenuItem Header="_Copy" Icon="{StaticResource iconCopy}" />

<MenuItem Header="_Paste" Icon="{StaticResource iconPaste}" />

<MenuItem Header="De_lete" Icon="{StaticResource iconDelete}" />

</ContextMenu>

</TextBox.ContextMenu>

  • Запустите проект

Обратите внимание, что применение акселератора Shift+F10 всегда вызывает наше контекстное меню в центре элемента редактирования.

Назначение ресурсов неразделяемыми

Отметьте странное поведение иконок: при открытии разделов меню соответствующая группа иконок исчезает из других элементов управления. Это происходит потому, что по умолчанию логический ресурс считается разделяемым. А это значит, что объект, объявленный в ресурсе, при многократном использовании может появляться только в одном месте. Чтобы это устранить, нужно объявить ресурс неразделяемым с помощью атрибута x:Shared="False" (share - разделять, делиться; shared - общий).

  • Добавьте в секцию объявления ресурсов атрибут x:Shared="False"

<Window.Resources>

<!-- File -->

<Image x:Shared="False" x:Key="iconNew" Source="Images/NewDocument.bmp" Width="16" Height="16" />

<Image x:Shared="False" x:Key="iconOpen" Source="Images/Open.bmp" Width="16" Height="16" />

<Image x:Shared="False" x:Key="iconSave" Source="Images/Save.bmp" Width="16" Height="16" />

<Image x:Shared="False" x:Key="iconPageSetup" Source="Images/PrintSetup.bmp" Width="16" Height="16" />

<Image x:Shared="False" x:Key="iconPrintPreview" Source="Images/PrintPreview.bmp" Width="16" Height="16" />

<Image x:Shared="False" x:Key="iconPrint" Source="Images/Print.bmp" Width="16" Height="16" />

<!-- Edit -->

<Image x:Shared="False" x:Key="iconUndo" Source="Images/Edit_Undo.bmp" Width="16" Height="16" />

<Image x:Shared="False" x:Key="iconRedo" Source="Images/Edit_Redo.bmp" Width="16" Height="16" />

<Image x:Shared="False" x:Key="iconCut" Source="Images/Cut.bmp" Width="16" Height="16" />

<Image x:Shared="False" x:Key="iconCopy" Source="Images/Copy.bmp" Width="16" Height="16" />

<Image x:Shared="False" x:Key="iconPaste" Source="Images/Paste.bmp" Width="16" Height="16" />

<Image x:Shared="False" x:Key="iconDelete" Source="Images/Delete.bmp" Width="16" Height="16" />

<Image x:Shared="False" x:Key="iconFind" Source="Images/Find.bmp" Width="16" Height="16" />

<Image x:Shared="False" x:Key="iconFont" Source="Images/Font.bmp" Width="16" Height="16" />

</Window.Resources>

  • Запустите проект - убедитесь, что сам интерфейс функционирует нормально