- •Лабораторная работа: События и команды в wpf
- •Обзор библиотечных событий
- •Упражнение 1. Обработка событий клавиатуры
- •События мыши
- •Упражнение 2. Прослушивание событий мыши
- •Упражнение 3. Создание и прослушивание пользовательского события
- •Обработчики уровня класса
- •Добавление информации в объект аргумента события
- •Задание для Упражнения 3
- •Модель команд
- •Объекты команд
- •Библиотечные классы команд
- •Присоединение команды к источнику
- •Привязка команды к прослушивающему элементу
- •Упражнение 4. Привязка команд в разметке
- •Перекрытие функций диспетчеризации событий
- •Прямой вызов команд
- •Упражнение 5. Привязка команд в процедурном коде
- •Жесты как источники команд
- •Добавление жестов в команду
- •Способ 1
- •Способ 2
- •Способ 3
- •Добавление жестов в прослушивающий элемент
- •Упражнение 6. Разработка простого блокнота без механизма команд
- •Создание главного меню
- •Добавление иконок
- •Создание логических ресурсов
- •Создание панели инструментов, строки состояния и рабочей области
- •Замена встроенного контекстного меню
- •Назначение ресурсов неразделяемыми
- •Замена иконок на прозрачные
- •Отключение встроенных команд
- •Подключение иконки приложения
- •Распределение класса по нескольким файлам и создание вспомогательных функций
- •Размещение вариантов заголовков окна в ресурсах приложения
- •Создание заготовок обработчиков
- •Регистрация обработчиков в разметке
- •Реализация обработчиков раздела меню File
- •Обработка системной кнопки
- •Реализация части обработчиков раздела меню Edit
- •Разработка и кодирование диалогового окна Find and Replace
- •Кодирование функциональности Find and Replace в основном окне
- •Подключение функциональности Find and Replace к источникам задач
- •Разработка диалогового окна Go To
- •Применение вложенных ресурсов
- •Подключение функциональности Go To к основному окну
- •Прочие задачи
- •Принудительная перерисовка окна
- •Добавление жестов
- •Логика отключения источников задач
- •Реализация логики отключения источников задачи Save
- •Упражнение 7. Разработка простого блокнота с использованием механизма команд
- •Создание нового проекта из копии существующего
- •Краткий анализ задачи
- •Создание и привязка команд
- •Реализация логики доступности источников команд
- •Отображение позиции курсора в строке состояния
Прочие задачи
В нашем приложении остались еще три запланированные задачи, обработчики которых мы разместили в файле Other.cs. Задачи Font и About требуют создания диалоговых окон. Чтобы не усложнять себе жизнь и не отвлекаться, ограничимся только простым показом стандартных диалогов.
Заполните обработчики в файле Other.cs следующим кодом
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace Notepad1
{
partial class Window1
{
//------------------------------------------------------
//
// Прочие обработчики
//
//------------------------------------------------------
private void FontOnExecute(object sender, RoutedEventArgs e)
{
System.Windows.Forms.FontDialog dlg =
new System.Windows.Forms.FontDialog();
switch (dlg.ShowDialog())
{
case System.Windows.Forms.DialogResult.Abort:
case System.Windows.Forms.DialogResult.Cancel:
case System.Windows.Forms.DialogResult.Ignore:
case System.Windows.Forms.DialogResult.No:
case System.Windows.Forms.DialogResult.None:
case System.Windows.Forms.DialogResult.OK:
case System.Windows.Forms.DialogResult.Retry:
case System.Windows.Forms.DialogResult.Yes:
break;
}
}
private void WordWrapOnExecute(object sender, RoutedEventArgs e)
{
if (itemWordWrap.IsChecked)
txtBox1.TextWrapping = TextWrapping.Wrap;
else
txtBox1.TextWrapping = TextWrapping.NoWrap;
}
private void AboutOnExecute(object sender, RoutedEventArgs e)
{
MessageBox.Show("Сведения об авторах...\n" +
"Сведения о программе...", "About");
}
}
}
Запустите проект и проверьте добавленную функциональность
Обратите внимание, что когда заворот строк выключен, то правая часть широкой строки уходит за рамки текстового элемента и становится невидимой. Текстовый элемент поля редактирования по умолчанию настроен так, что вертикальная скролирующая линейка появляется автоматически, когда текст не вмещается по вертикали. Но горизонтальная полоса скролирования по умолчанию отключена. Исправим это.
Добавьте в разметку открывающего дескриптора элемента txtBox1 в файле Window1.xaml следующий атрибут
<!-- Многострочное текстовое поле редактирования -->
<TextBox TextWrapping="Wrap"
AcceptsReturn="True"
AcceptsTab="True"
VerticalScrollBarVisibility="Auto"
Name="txtBox1"
TextChanged="txtBox1_TextChanged"
HorizontalScrollBarVisibility="Auto"
>
Запустите проект и проверьте добавленную функциональность
