|
Программирование >> Расширенный wf
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 ;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |