Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
course_(Windows&Web).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.68 Mб
Скачать

Лабораторная работа 4. Использование команд в технологиях wpf и Silverlight

Краткая аннотация лабораторной работы: в лабораторной работе будут даны задания для самостоятельного выполнения на закрепление пройденной теоретической части лекции 8, а так же рассмотрены 3 примера, способствующие общему видению решения поставленной в лабораторной работе задач. Для более частных решений опирайтесь на лекцию 8.

Цель лабораторной работы: рассмотреть примеры практического использования стандартных и нестандартных команд. Перевод команд из неактивного состояния в активное и обратно. В качестве примеров команд мы рассмотрим операции Копировать, Вырезать и Вставить, доступные во многих приложениях.

Задания для самостоятельного выполнения

На основании рассмотренных в лабораторной работе примеров разработать WPF приложение «Блокнот». Позволяющее с помощью меню и горячих клавиш редактировать текст (копировать, вырезать, вставлять, изменять шрифт).

Учебный элемент. Использование стандартных и нестандартных команд Шаг 1. Использование стандартных команд.

Задача. Вы хотите, чтобы программа реагировала на команды меню, щелчки по панели инструментов и клавиатурные комбинации.

Решение. Технология WPF включает в себя целый ряд стандартных обработчиков команд, реагирующих на события стандартных элементов управления.

Например, если ассоциировать пункт меню Сору (Копировать) со встроенной командой Сору, она автоматически станет активной, как только фокус перейдет на элемент TextBox.

<Window x: Class ="WpfTextEditor.Windowl" ... > <DockPanel Name="dockPanell" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> <Menu DockPanel.Dock="Top" Height="Auto"> <MenuItem Header="_Edit"> <MenuItem Header="_Copy" Cammand="Copy"/> <MenuItem Header="_Cut" Cammand="Cut"/> <MenuItem Header="_Paste" Cammand="Paste"/> </MenuItem> </Menu> <ToolBarTray DockPanel.Dock="Top"> <ToolBar > <Button Caranand="ApplicationCaiiinands. Copy"> <Image Source="Resources\Copy.png" Opacity="l" /> </Button> </ToolBar> </ToolBarTray> </DockPanel> </Window>

Шаг 2. Использование нестандартных команд.

Задача. Вы хотите создать собственные команды, специфичные для данного приложения.

Решение. Обычно команды сгруппированы в статических классах, чтобы к ним удобнее было обращаться. Определим две команды:

public class WpfTextEditorCommands { public static RoutedUICommand ExitCommand; public static RoutedUICommand WordWrapCommand; static WpfTextEditorCommands () { InputGestureCollection exitInputs = new InputGestureCollection(); exitlnputs.Add(new KeyGesture(Key.F4, ModifierKeys.Alt) ) ; ExitCommand = new RoutedUICommand("Exit application", "ExitApplication", typeof(WpfTextEditorCommands), exitInputs); WordWrapCommand = new RoutedUICommand("Word wrap", "Wordwrap", typeof (WpfTextEditorCommands) ) ; } }

Теперь можно связывать эти команды с элементами управления и закреплять их за обработчиками событий:

public partial class Window1:Window { public Window1() { InitializeComponent(); // Создать обработчики для наших нестандартных команд CommandBinding cmdBindingExit = new CommandBinding (WpfTextEditorCommands.ExitCommand); cmdBindingExit.Executed += new ExecutedRoutedEventHandler(cmdBindingExit_Executed); CommandBinding cmdBindingWordWrap = new CommandBinding (WpfTextEditorCommands.WordWrapCommand); cmdBindingWordWrap.Executed += new ExecutedRoutedEventHandler(cmdBindingWordWrap_Executed); this.CommandBindings.Add(cmdBindingExit); this.CommandBindings.Add(cmdBindingWordWrap); } void cmdBindingWordWrap_Executed(object sender, ExecutedRoutedEventArgs e) { textBox.TextWrapping = ((textBox.TextWrapping == TextWrapping.NoWrap) ? TextWrapping.Wrap : TextWrapping.NoWrap); } void cmdBindingExit_Executed(object sender, ExecutedRoutedEventArgs e) { Application.Current.Shutdown(); } }

Соберем все вместе с помощью XAML-кода:

<Window x:Class="WpfTextEditor.Windowl" ... > <DockPanel Name="dockPanel1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"> <Menu DockPanel.Dock="Top" Height="Auto"> <MenuItem Header="_Fi1e"> <MenuItem Header="_Exit" Conmmand="local:Wpf TextEditor Commands.ExitCammand"/> </MenuItem> <MenuItem Header="_View"> <MenuItem Header="_Wordwrap" IsCheckable="True" Name="menuItemWordwrap" Command="local:Wpf TextEditorCommands.WordWrapCammand"/> </MenuItem> </Menu> <ToolBarTray DockPanel.Dock="Top"> <ToolBar> <CheckBox IsChecked="{Binding Mode=TwoWay, ElementName=menuItemWordWrap, Path=IsChecked}" Command="local:Wpf TextEditorCommands.WordWrapCammand"> <Image Source="Resources\WordWrap.png" OpacityMask="White"/> </CheckBox> </ToolBar> </ToolBarTray> </DockPanel> </Window>

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]