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

Замена иконок на прозрачные

И наконец, прежде чем приступить к кодированию логики, все-таки изменим фон иконок, просто заменив их на рисунки с прозрачным фоном. Такой набор иконок можно найти все в том же поставляемом вместе с Visual Studio 2008 архиве VS2008ImageLibrary.zip в папке VS2008ImageLibrary\Actions\pngformat. Для удобства этот набор скопирован в прилагаемую к работе папку Source. Это файлы типа png и их имена имеют приставку HS (Hide or Show), например, вместо Cut.bmp имя нового файла - CutHS.png.

  • Добавьте в папку Images проекта из Source 14 рисунков png командой контекстного меню Add/Existing Item

  • Командой Find and Replace (жест Ctrl+H) выполните замену в файле Window1.xaml всех вхождений .bmp на HS.png

  • Запустите проект и убедитесь, что фон иконок во всех элементах стал прозрачным

увеличить изображение

Отключение встроенных команд

Прежде, чем приступить к реализации функциональности с помощью подключения команд, потренируемся на отключении встроенных команд элемента TextBox. Обратите внимание, что хоть мы и заменили встроенное меню TextBox на свое и соответствующие опции в этом контекстном меню перестали работать, все-таки продолжают функционировать встроенные жесты, типичные для текстового поля редактирования: Ctrl+Home, Ctrl+End, Ctrl+X, Ctrl+C, Ctrl+V, Ctrl+Z, Ctrl+Y и т.д. Попробуем отключить встроенные жесты на примере команд Cut (Ctrl+X), Copy (Ctrl+C) и Paste (Ctrl+V).

  • Добавьте в открывающий дескриптор окна подписку на событие Loaded, чтобы создать обработчик для размещения процедурного кода, который будет выполнен сразу после инициализации элементов окна, определенных в разметке

<Window x:Class="Notepad1.Window1"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Title="Window1: Управление состоянием источников команд"

Width="500" Height="375"

MinWidth="500" MinHeight="375"

WindowStartupLocation="CenterScreen"

ResizeMode="CanResizeWithGrip"

Loaded="Window_Loaded"

>

......................................................

</Window>

  • Присвойте в разметке имя элементу TextBox для возможности его кодирования в файле Window1.xaml.cs

<TextBox TextWrapping="Wrap"

AcceptsReturn="True"

AcceptsTab="True"

VerticalScrollBarVisibility="Auto"

Name="txtBox1"

>

.................................................

</TextBox>

  • Добавьте в обработчик события Loaded следующий код отключения встроенных жестов вырезания, копирования и вставки в элементе текстового поля

private void Window_Loaded(object sender, RoutedEventArgs e)

{

// Отключаем в TextBox встроенный жест Ctrl+X для команды Cut

KeyBinding keyBinding = new KeyBinding(

ApplicationCommands.NotACommand, Key.X, ModifierKeys.Control);

txtBox1.InputBindings.Add(keyBinding);

// Отключаем в TextBox встроенный жест Ctrl+C для команды Copy

keyBinding = new KeyBinding(

ApplicationCommands.NotACommand, Key.C, ModifierKeys.Control);

txtBox1.InputBindings.Add(keyBinding);

// Отключаем в TextBox встроенный жест Ctrl+V для команды Paste

keyBinding = new KeyBinding(

ApplicationCommands.NotACommand, Key.V, ModifierKeys.Control);

txtBox1.InputBindings.Add(keyBinding);

}

Ключевым элементом в данном способе отключения жестов является команда NotACommand, которая означает пустую команду. Мы отключили только источники возбуждения встроенных команд для конкретного элемента TextBox, но сами встроенные команды продолжают существовать с теми же самыми жестами.