Программирование - это просто
Advertisement
Главная arrow Уроки программирования arrow Windows Presentation Foundation (WPF). arrow Windows Presentation Foundation (WPF). Урок 3. Свойства объектов XAML.
28.02.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Windows Presentation Foundation (WPF). Урок 3. Свойства объектов XAML. Печать E-mail
Автор megabax   
07.02.2013 г.
http

Windows Presentation Foundation (WPF). Урок 3. Свойства объектов XAML.

Поместив на форму WPF приложения кнопочку:

Windows Presentation Foundation (WPF). Урок 3. Свойства объектов XAML.

Мы видим, что у нее есть например, такие свойства, как HorizontalAlignment, в XAML они задаются строкой, но в .NET свойство HorizontalAlignment элемента Button вовсе не строка, это enum. Иными словами, анализатору XAML приходиться конвертировать типы свойств. При этом он выполняет следующие действия:

  • Проверяет объявление свойства на наличие атрибута TypeConverter. Если находит то использует для конвертации класс, на который указывает это свойство.

  • Если такого атрибута нет, то анализатор XAML проверяет объявление класса соответствующего типа данных.
  • Если и после этого конвертор типов не найден, то анализатор генерирует сообщение об ошибке.

Однако конверторы свойств подходят не для всех сценариев.  В частности, некоторые свойства являются полноценными объектами с собственными наборами свойств. Можно, конечно, создать строковое представление объектов, но это неудобно и повышает вероятность ошибки. К счастью есть синтаксис "Свойство.Элемент". Суть этого синтаксиса состоит в том, что у свойств можно задавать отдельные элементы "через точку". Например для того что бы задать свойство Background у элемента Grid  можно использовать Grid.Background, вот пример синтаксиса задания этого свойства:

    <Grid>

        <Grid.Background>

            <LinearGradientBrush>

                <LinearGradientBrush.GradientStops>

                    <GradientStop Offset="0.0" Color="Red"/>

                    <GradientStop Offset="0.5" Color="Indigo"/>

                    <GradientStop Offset="1.5" Color="Violet"/>

                </LinearGradientBrush.GradientStops>

            </LinearGradientBrush>

        </Grid.Background>

        <Button Content="Кнопка" Height="23" HorizontalAlignment="Left" Margin="88,41,0,0" Name="MyButton" VerticalAlignment="Top" Width="75" />

    </Grid>

Вот к какому эффекту приведет данный синтаксис:

Windows Presentation Foundation (WPF). Урок 3. Свойства объектов XAML.

Это же самое можно сделать и программно. Но мы напишем программный код для другой заливки и поместим его в обработчик нажатия кнопочки "Кнопка":

        private void MyButton_Click(object sender, RoutedEventArgs e)

        {

            LinearGradientBrush brush = new LinearGradientBrush();

 

            GradientStop stop = new GradientStop();

            stop.Offset = 0;

            stop.Color = Colors.Yellow;

            brush.GradientStops.Add(stop);

 

            stop = new GradientStop();

            stop.Offset = 0.2;

            stop.Color = Colors.Green;

            brush.GradientStops.Add(stop);

 

            stop = new GradientStop();

            stop.Offset = 1.2;

            stop.Color = Colors.Red;

            brush.GradientStops.Add(stop);

 

            grid1.Background = brush;

        }

Задам имя объекта Grid:

Windows Presentation Foundation (WPF). Урок 3. Свойства объектов XAML.

и запустим программу на тестирование. Сначала у нас окно имеет вот такой вид:

Windows Presentation Foundation (WPF). Урок 3. Свойства объектов XAML.

а при нажатии на кнопочку уже вот такой:

Windows Presentation Foundation (WPF). Урок 3. Свойства объектов XAML.

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

Вот так вот например, можно ссылаться на статическое свойство другого класса (синтаксис выделен серым):

<Button Content="Кнопка" Height="23" HorizontalAlignment="Left" Margin="88,41,0,0" Name="MyButton" VerticalAlignment="Top" Width="75" Click="MyButton_Click" Foreground="{x:Static SystemColors.ActiveCaptionBrush}"></Button>

В данном случае мы цвет текста на кнопке задаем как значение SystemColors.ActiveCaptionBrush. Вот к какому эффекту это приведет:

Windows Presentation Foundation (WPF). Урок 3. Свойства объектов XAML.

Данный синтаксис эквивалентен следующему коду:

MyButton.Foreground = SystemColors.ActiveCaptionBrush;

За разбор расширенной разметки отвечает класс StaticExtension. Префикс x в синтаксисе указывает на то, что этот класс находиться в одном из пространств имен XAML.

Все расширения разметки реализованы классами, ддочерними от  System.Windows.Markup.MarkupExtension. Этот класс содержит всего один метод ProvideValue.

Напоследок я расскажу о таком понятии, как присоединенные свойства. Это такие свойства, которые применяются к нескольким элементам управления, но определны в другом классе. В WPF такие свойства часто используются для управления компоновкой. Что бы было более понятно, продемонстрирую это на примере. и так, давайте у объекта Grid сделаем пару строчек и пару столбцов (свойства ColumnDefinitions и RowDefinitions):

Windows Presentation Foundation (WPF). Урок 3. Свойства объектов XAML.

Для этого просто жмем на кнопочку с тремя точками, что бы вызвать окно редактирования коллекции:

Windows Presentation Foundation (WPF). Урок 3. Свойства объектов XAML.

У нас появиться сетка, куда мы можем поместить элементы управления:

Windows Presentation Foundation (WPF). Урок 3. Свойства объектов XAML.

У этих элементов управления как раз так и появиться присоединенное свойство, которое указывает на ячейку сетки, в которую помещен данный элемент управления:

Windows Presentation Foundation (WPF). Урок 3. Свойства объектов XAML.

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

Так же эти свойства видны в диспетчере свойств:

Windows Presentation Foundation (WPF). Урок 3. Свойства объектов XAML.

Установку дополнительных свойств можно делать и программно, например, так:

        private void button1_Click(object sender, RoutedEventArgs e)

        {

            Grid.SetRow(button2, 0);

        }

Вот у нас кнопочка button1:

Windows Presentation Foundation (WPF). Урок 3. Свойства объектов XAML.

А вот button2:

Windows Presentation Foundation (WPF). Урок 3. Свойства объектов XAML.

нажимаем на button1, и button2 у нас смещается в другую ячейку сетки:

Windows Presentation Foundation (WPF). Урок 3. Свойства объектов XAML.

Тот же самый эффект мы получим если запишем код в таком виде:

        private void button1_Click(object sender, RoutedEventArgs e)

        {

             button2.SetValue(Grid.RowProperty, 0);

        }

На этом урок окончен, до новых встреч.

 

 

Последнее обновление ( 07.02.2013 г. )
 
« След.   Пред. »
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги