Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Янин В.Л. "Новгородские акты XII-XV Хронологический комментарий" (История)

Майринк Г. "Белый доминиканец " (Художественная литература)

Хусаинов А. "Голоса вещей. Альманах том 2" (Художественная литература)

Петров Г.И. "Отлучение Льва Толстого " (Художественная литература)

Хусаинов А. "Голоса вещей. Альманах том 1 " (Художественная литература)
Реклама

Windows presentation foundation with - MacDonald M.

MacDonald M. Windows presentation foundation with — Вильямс , 2008. — 928 c.
ISBN 978-5-8459-1429-3
Скачать (прямая ссылка): wpfwindowspresente2008.pdf
Предыдущая << 1 .. 22 23 24 25 26 27 < 28 > 29 30 31 32 33 34 .. 473 >> Следующая

Расширения разметки могут применяться во вложенных дескрипторах или атрибутах XML, что встречается чаще. Когда они используются в атрибутах, то всегда окружаются фигурными скобками {}. Например, вот как вы можете использовать StaticExtension, позволяющее сослаться на статическое свойство другого класса:
<Button ... Foreground="{x:Static SystemColors.ActiveCaptionBrush}" >
Расширения разметки используют синтаксис {КлассРасширенияРазметки Аргумент}. В этом случае расширением разметки служит класс StaticExtension. (По соглашению вы можете пропускать последнее слово Extension, ссылаясь на класс расширения.) Префикс x: указывает на то, что StaticExtension находится в одном из пространств имен XAML. Также вы встретите расширения разметки, являющиеся частью пространств имен WPF, но не имеющие префикса x: .
Все расширения разметки реализованы классами, производными от System. Windows.Markup.MarkupExtension. Базовый класс MarkupExtension чрезвычайно прост — он включает единственный метод ProvideValue() , получающий значение, которое вы хотите. Другими словами, когда анализатор XAML встречает предыдущий оператор, он создает экземпляр класса StaticExtension (передавая строку "SystemColors.ActiveCaptionBrush" в качестве аргумента конструктора), а затем вызывает ProvideValue() , чтобы получить объект, возвращенный статическим свойством SystemColors.ActiveCaption.Brush. Свойство Foreground кнопки cmdAnswer затем устанавливается равным извлеченному объекту.
Конечный результат этого фрагмента XAML-кода эквивалентен тому, как если бы вы написали следующее:
cmdAnswer.Foreground = SystemColors.ActiveCaptionBrush;
Поскольку расширения разметки отображаются на классы, они могут также применяться в виде вложенных свойств, как вам уже известно из предыдущего раздела. Например, вы можете использовать StaticExtension со свойством Button.Foreground следующим образом:
<Button ... >
<Button.Foreground>
<x:Static Member="SystemColors.ActiveCaptionBrush"></x:Static> </Button.Foreground>
</Button>
В зависимости от сложности расширения разметки и количества свойств, которые вы хотите установить, иногда синтаксис будет проще.
Как большинство расширений разметки, StaticExtension должен вычисляться во время выполнения, потому что только тогда вы сможете определить текущие системные цвета. Некоторые расширения разметки могут определяться во время компиляции. К ним относятся NullExtension (представляющее значение null) и TypeExtension (конструирующее объект, представляющий тип .NET). На протяжении этой книги вы увидите много примеров расширений разметки в действии, в частности, когда пойдет речь о ресурсах и привязке данных.
Прикрепленные свойства
Наряду с обычными свойствами XAML также включает концепцию прикрепленных свойств — свойств, которые могут применяться к нескольким элементам управления, но определены в другом классе. В WPF прикрепленные свойства часто применяются для управления компоновкой.
Book_Pro_WPF-2.mdb 58 19.05.2008 18:09:40
XAML 59
Вот как это работает. Каждый элемент управления имеет свой собственный набор внутренних свойств. (Например, текстовое поле имеет специфический шрифт, цвет текста и текстовое содержимое — все это определено такими свойствами, как FontFamily, Foreground и Text.) Когда вы помещаете элемент управления внутри контейнера, он получает дополнительные свойства, в зависимости от типа контейнера. (Например, если вы поместите текстовое поле внутрь экранной сетки (grid), то вам нужно будет как-то указать ячейку, куда ее помещать.) Эти дополнительные детали устанавливаются с использованием прикрепленных свойств.
Прикрепленные свойства всегда используют имя из двух частей в форме ОпределяемыйТип.ИмяСвойства. Этот синтаксис позволяет анализатору XAML различать нормальное свойство и прикрепленное свойство.
В примере с автоответчиком прикрепленные свойства позволяют индивидуальным элементам управления размещать себя в разных строках (невидимой) сетки.
<TextBox ... Grid.Row="0">
[Place question here.]
</TextBox>
<Button ... Grid.Row="1">
Ask the Eight Ball
</Button>
<TextBox ... Grid.Row="2">
[Answer will appear here.]
</TextBox>
Прикрепленные свойства в действительности вообще свойствами не являются. На самом деле они транслируются в вызовы методов. Анализатор XAML вызывает статический метод, имеющий форму ОпределяемыйТип.SetИмяСвойства() . Например, в предыдущем фрагменте XAML определяемый тип — класс Grid, а свойство — Row, поэтому анализатор вызывает Grid.SetRow() .
При вызове SetИмяСвойства() анализатор принимает два параметра: модифицируемый объект и специфицированное значение свойства. Например, когда вы устанавливаете свойство Grid.Row на элементе управления TextBox, то анализатор XAML выполняет следующий код:
Grid.SetRow(txtQuestion, 0);
Этот шаблон (с вызовом статического метода определенного типа) удобен тем, что скрывает то, что происходит на самом деле. На первый взгляд этот код выглядит так, будто номер строки сохраняется в объекте Grid. Однако номер строки в действительности сохраняется в объекте, которого он касается, в данном случае — в TextBox.
Предыдущая << 1 .. 22 23 24 25 26 27 < 28 > 29 30 31 32 33 34 .. 473 >> Следующая