Разработка пользовательского интерфейса на основе технологии Windows Presentation Foundation. Михаил Абрамян
Чтение книги онлайн.

Читать онлайн книгу Разработка пользовательского интерфейса на основе технологии Windows Presentation Foundation - Михаил Абрамян страница 21

СКАЧАТЬ настройки (в нашем случае – настройки для России), хотя имеется перегруженный вариант метода ToString, где можно явно указать требуемую региональную настройку. Можно также сменить региональную настройку для приложения в целом; для этого достаточно установить новое значение свойства CurrentCulture для объекта Thread.CurrentThread из пространства имен System.Threads. Например, для того чтобы установить для нашего приложения региональные настройки, соответствующие американскому варианту английского языка, достаточно добавить в конструктор следующий оператор:

screen_image_65_216_61

      При этом вариант отображения текущего времени в окне изменится (рис. 16).

screen_image_65_260_110

      Рис. 16. Окно приложения CLOCK с измененными региональными настройками

      Заметим, что настройки для России имеют имя «ru-RU».

      2. В отличие от библиотеки Windows Forms, где предусмотрен специальный невизуальный компонент Timer, в библиотеке WPF приходится использовать «обычный» объект типа DispatcherTimer (из пространства имен System.Windows.Threading), явным образом задавая в программе все его свойства и события. Обратите внимание на то, что свойство Interval (время между срабатываниями таймера) имеет тип TimeSpan (этот тип подробно описывается в последнем комментарии к следующему пункту).

      3. Особенностью макета данного приложения является использование рамки Border вокруг метки с текстом текущего времени. Для отображения времени мы использовали специальную текстовую метку TextBlock, содержимым которой (в отличие от «обычной» метки Label) может быть только текст. В качестве имени для этого компонента мы выбрали label1 как более кратное и наглядное по сравнению с textBlock1.

      Недочет. В течение первой секунды после запуска программы в метке сохраняется исходный текст «00:00:00», так как событие Tick возникает первый раз только через промежуток времени timer1.Interval, равный в нашем случае 1000 миллисекундам.

      Исправление. Добавьте вызов обработчика для таймера в конструктор окна MainWindow:

screen_image_66_125_59

      4.2. Реализация возможностей секундомера

screen_image_66_156_59

      В классе MainWindow определите обработчики, уже добавленные в него в результате указания атрибутов Click в xaml-файле:

screen_image_66_426_59screen_image_67_55_76

      Кроме того, добавьте в класс MainWindow новое поле

screen_image_67_245_76

      а также дополните обработчик timer1_Tick:

screen_image_67_267_75

      Результат. При установке флажка Timer во включенное состояние программа переходит в режим секундомера, причем секундомер сразу запускается, отображая на экране секунды и десятые доли секунд (рис. 17). Запуск и остановка секундомера осуществляются по нажатию кнопки Start/Stop, сброс секундомера – по нажатию кнопки Reset. Доступны клавиши-ускорители: Alt+T (смена режима «часы/секундомер»), Alt+S (старт/остановка секундомера), Alt+R (сброс секундомера).

screen_image_68_57_148

      Рис. 17. Окно приложения CLOCK в режиме секундомера

      Комментарии

      1. Свойство IsChecked компонента CheckBox имеет в WPF тип bool?, т. е. может принимать три значения: true, СКАЧАТЬ