- •Тверской государственный технический университет
- •Разработка приложений на основе технология wpf.
- •1. Теоретическая часть.
- •1.1. Введение.
- •1.2. Взаимодействие дизайнера и разработчика
- •1.3. Язык xaml
- •1.4.3. Добавление списка.
- •1.4.4. Добавление обработчика события.
- •1.4.5. Запуск приложения.
- •1.4.6. Рисование фигур.
- •1.4. Создание простого wpf-приложения
- •1.4.1. Создание проекта wpf
- •1.4.2. Разделение окна на два столбца
- •1.5. Особенности использования технологии wpf.
- •1.5.1. Еще раз о технологии wpf.
- •1.5.2. Метод InitializeComponent ()
- •1.5.3. Именование элементов.
- •1.5.4. Свойства и события в xaml
- •1.5.5. Простые свойства и конвертеры типов
- •1.5.6. Сложные свойства.
- •1.5.7. Расширения разметки.
- •1.5.8. Прикрепленные свойства
- •1.5.9. Вложенные элементы.
- •1.5.10. События
- •1 .5.11. Полный пример автоответчика
- •1.5.12. Загрузка и компиляция xaml
- •2. Указания к выполнению лабораторной работы
- •2.1. Задание на лабораторную работу
- •2.2. Содержание отчета по лабораторной работе
- •Литература:
1.5.3. Именование элементов.
Есть еще одна деталь, которую следует принимать во внимание. В классе отделенного кода вам часто захочется программно манипулировать элементами управления. Например, вы можете читать либо изменять свойства, прикреплять или откреплять обработчики событий на лету. Чтобы обеспечить такую возможность, элемент управления должен включать XAML-атрибут Name. В предыдущем примере элемент Grid не включает атрибут Name, поэтому вы не сможете манипулировать им в отделенном коде.
Вот как можно присвоить имя элементу Grid:
<Grid x:Name = "grid1">
</Grid>
Вы можете провести это изменение в документе XAML вручную, или же выбрать элемент в дизайнере Visual Studio и установить свойство Name в окне Properties (Свойства). В обоих случаях атрибут Name сообщит анализатору XAML-текста о необходимости добавить поле следующего вида к автоматически сгенерированной части класса Windowl:
private System.Windows.Controls.Grid grid1;
Теперь вы можете взаимодействовать со своим элементом в коде вашего класса Window1, используя имя grid1:
MessageBox.Show(String.Format("The grid is {0}x{l} units in size.",
grid1.ActualWidth, grid1.ActualHeight));
Такая техника мало, что дает простому примеру, но становится намного важнее, когда вам нужно читать значения из вводных элементов управления, таких как текстовые поля и списки.
Свойство Name, показанное ранее, является частью языка XAML и используется для того, чтобы помочь в интеграции вашего класса отделенного кода. Некоторая путаница происходит из-за того, что многие классы определяют свое собственное свойство Name. (Примером может служить базовый класс FrameworkElement, от которого наследуются все элементы WPF.) Анализаторы XAML элегантно справляются с этой проблемой. Вы можете либо установить XAML-свойство Name (используя префикс х:), либо свойство Name, относящееся к действительному элементу (пропустив префикс). В любом случае результат один и тот же — специфицированное вами имя используется в файле автоматически сгенерированного кода и применяется для установки свойства Name.
Это значит, что следующая разметка эквивалентна тому, что вы уже видели:
<Grid Name="grid1">
</Grid>
Этот трюк работает только в том случае, если включающий свойство Name класс оснащен атрибутом RuntimeNameProperty. Этот атрибут указывает на то, какое свойство должно трактоваться как имя экземпляра этого типа. (Очевидно, обычно таким свойством является Name.) Класс FrameworkElement включает атрибут RuntimeNameProperty, так что никаких проблем нет.
Совет. В традиционном приложении Windows Forms каждый элемент управления имеет имя. В приложении WPF такого требования нет. Однако если вы создаете окно перетаскиванием элементов на поверхность дизайна Visual Studio, то каждому элементу присваивается автоматически сгенерированное имя. Таково соглашение. Если вы не собираетесь взаимодействовать с элементом в вашем коде, то можете удалить атрибут Name из кода разметки. В примерах, предлагаемых в настоящей книге, имена элементов обычно пропускаются, если они не нужны, что сокращает код разметки.
Теперь у вас должно появиться базовое понимание того, как интерпретировать документ XAML, определяющий окно, и как документ XAML преобразуется в конечный компилированный класс (с добавлением любого написанного вами кода). В следующем разделе мы рассмотрим синтаксис свойств более подробно, и узнаем, как привязывать к элементам обработчики событий.
