Программирование >>  Расширенный wf 

1 ... 5 6 7 [ 8 ] 9 10 11 ... 15


ValidationRules - это свойство класса Binding, содержащее элемента: ValidationRule. Ниже приведено правило проверки достоверности, используемое специальным классом RegularExpressionValidationRule, где свойство Expression установлено в регулярное выражение, проверяющее ввод на соответствие формату адреса электронной почты, а свойство ErrorMessage выдает сообщение об ошибке в случае, если введенные в TextBox данные неверны.

<Label Margin= 5 Grid.Row= 2 Grid.Column= 0 > Email: </Label> <TextBox Margin= 5 Grid.Row= 2 Grid.Column= l > <TextBox.Text>

<Binding Path= Email UpdateSourceTrigger= LostFocus > <Binding.ValidationRules> <src:RegularExpressionValidationRule

Expression= -([\w-\.]+)@((\[[0-9]{l,3}\.[0-9]{l,3}\.[0-9]{l,3}\.) (([\w-]+\.)+))([a-zA-Z]{2,4}[0-9]{l,3})(\]?)$ ErrorMessage= Email is not valid /> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox>

Привязка команд

WPF включает элементы управления Menu и ToolBar, служащие тем же целям, что и элемент!, известные вам по Windows Forms: запускать команды. К этим элементам управления вы можете добавлять обработчики событий, чтобы обеспечить функциональность команд. Однако вы можете запускать команды, выбирая пункты меню, щелкая на кнопках в панели инструментов либо нажимая определенные клавиши на клавиатуре. Чтобы обработать все эти разнообразные действия, WPF предлагает другое средство - команды.

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

В WPF предусмотрены некоторые предопределенные команды в классах команд ApplicationCommands, EditingCommands, ComponentCommands и NavigationCommands. Все эти классы команд являются статическими, со статическими свойствами, возвращающими объекты RoutedUICommands. Например, некоторые из свойств ApplicationCommands таковы: New, Open, Save, SaveAs, Print и Close, т.е., это команды, известные вам по многим приложениям.

Чтобы приступить к работе с командами, создайте простой проект WPF и добавьте элемент управления Menu с пунктами для операций отмены, повтора, вырезки, копирования и вклейки. TextBox по имени textContent занимает остальное место окна и обеспечивает возможность многострочного ввода. Внутри окна создается панель DockPanel, определяющая компоновку. К верхней части окна пристыкован элемент управления Menu с элементами MenuItem. Установлен заголовок, определяющий текст меню. Знак определяет букву, к которой вы можете получить быстрый доступ с клавиатуры, без использования мыши. Когда вы нажимаете клавишу <Alt>, под этой буквой из текста заголовка появляется подчеркивание. Свойство Command определяет команду, ассоциированную с пунктом меню.

<Window x:Class= Wrox.ProCSharp.WPF.WPFEditorWindow

xmlns= http: schemas.microsoft.com/winfx/20 06/xaml/presentation xmlns:x= http: schemas.microsoft.com/winfx/200 6/xaml Title= WPF Editor Height= 300 Width= 300

>



<DockPanel>

<Menu DockPanel.Dock= Top > <MenuItem Header= Edit > <MenuItem Name= editUndoMenu Header= Undo

Command= ApplicationCommands.Undo /> <MenuItem Name= editRedoMenu Header= Redo

Command= ApplicationCommands.Redo /> <Separator/>

<MenuItem Name= editCutMenu Header= Cu t

Command= ApplicationCommands.Cut /> <MenuItem Name= editCopyMenu Header= Copy

Command= ApplicationCommands.Copy /> <MenuItem Name= editPasteMenu Header= Paste Command= ApplicationCommands.Paste /> </MenuItem> </Menu>

<TextBox Name= textContent TextWrapping= Wrap AcceptsReturn= True

AcceptsTab= True /> </DockPanel> </Window>

Это все, что вам нужно, чтобы реализовать функциональность буфера обмена. Класс TextBox уже включает функциональность для этих предопределенных привязок команд. Запустив приложение и начав вводить текст в текстовое поле, вы увидите, что соответствующие пункты меню станут активными. Выбор текста в поле сделает активными пункты меню, управляющие вырезкой и копированием. На рис. 35.15 показано работающее приложение.


Рис. 35.15. Приложение простого редактора во время выполнения

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

Чтобы сделать их доступными, понадобятся добавить дополнительные элементы MenuItem в элемент Menu, как показано ниже:

<MenuItem Header= File > <MenuItem Name= fileNewMenu Header= New Command= ApplicationCommands.New /> <MenuItem Name= fileOpenMenu Header= Open Command= ApplicationCommands.Open /> <Separator />

<MenuItem Name= fileSave Header= Save Command= ApplicationCommands.Save /> <MenuItem Name= fileSaveAs Header=Save As /> </MenuItem>

Команды также могут быть доступны из панели инструментов. В элементе ToolBar определены те же команды, что и в меню. Для размещения панели инструментов элемент ToolBar вставлен внутрь ToolBarTray:



<ToolBarTray DockPanel.Dock= Top >

<ToolBar>

<Button Command= ApplicationCommands.New >

<Image Source= toolbargraphics/New.bmp />

</Button>

<Button Command= ApplicationCommands.Open >

<Image Source= toolbargraphics/Open.bmp />

</Button>

<Button Command= ApplicationCommands.Save >

<Image Source= toolbargraphics/Save.bmp /> </Button> </ToolBar> </ToolBarTray>

Теперь привязки команд должны быть определены для ассоциации команд с обработчиками событий. Привязки команд могут быть присвоены любому классу WPF, производному от базового класса UIElement, находящемуся очень высоко в иерархии. Привязки команд добавляются к свойству CommandBindings в виде элементов CommandBinding. Класс CommandBinding имеет свойство Command, в котором вы специфицируете объект, реализующий интерфейс ICommand, а также события CanExecute и Executed для указания обработчиков событий. Ниже приведены привязки команд, назначенные классу Window. Событие Executed установлено в методы-обработчики событий, реализующие функциональность, выполняемую командами. Если команда не должна быть доступна постоянно, вы можете также установить обработчик CanExecute, который будет решать, когда данная команда должна быть доступна.

<Window.CommandBindings>

<CommandBinding Command= ApplicationCommands.New Executed= NewFileExecuted /> <CommandBinding Command= ApplicationCommands.Open Executed= OpenFileExecuted /> <CommandBinding Command= ApplicationCommands.Save Executed= SaveFileExecuted CanExecute= SaveFileCanExecute />

<CommandBinding Command= ApplicationCommands.SaveAs Executed= SaveAsFileExecuted

CanExecute= SaveAsFileCanExecute /> </Window.CommandBindings>

В коде метода-обработчика NewFileExecuted() происходит очистка текстового поля и запись имени файла untitled.txt в свойство Title класса Window.

В OpenFileExecuted() создается Microsoft.Win32.OpenFileDialog и отображается в виде диалогового окна. При успешном выходе из диалога выбранный файл открывается и записывается в элемент управления TextBox.

Диалог открытия файла в WPF не предопределен. Вы можете либо создать собственный диалог для выбора файлов и папок, либо воспользоваться классом OpenFileDialog из пространства имен Microsoft.win32, который служит оболочкой диалога Win32.

public partial class Windowl : System.Windows.Window

private string filename;

private readonly string defaultFilename;

private const string appName = WPF Editor ;

private bool isChanged = false;

public Windowl()

defaultFilename =

Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @ \untitled.txt ;



1 ... 5 6 7 [ 8 ] 9 10 11 ... 15

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика