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

Windows Presentation Foundation (WPF). Урок 4. Некоторые особенности XAML, о которых следует знать.

Как уже говорилось в уроке 2, документы XAML представляют собой дерево элементов с высокой степенью вложенности. Так, в примере, который мы рассматривали на уроке 3, элемент Windows содержит элемент Grid, а тот, в свою очередь, содержит элементы Button. Средствами XAML можно решить, как поступать тому или иному элементу с вложенными объектами. Тут возможно три варианта:

  • Если родительский элемент реализует интерфейс IList, анализатор вызывает IList.Add(), передавая ему дочерний элемент.
  • Если родительский элемент реализует интерфейс IDictionary, анализатор вызывает  IDictionary.Add() и передает ему дочерний элемент. При использовании коллекции словаря так же  нужно устанавливать атрибут x:Key, что бы назначить ключевое имя каждому элементу.

  • Если родительский элемент имеет атрибут ContentProperty, анализатор использует дочерний элемент, что бы установить его свойство.

В качестве классического примера вложенных элементов можно привести урок 3, в котором мы описывали свойство Background у элемента Grid:

    <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>

в данном случае анализатор распознает элемент  LinearGradientBrush.GradientStops как сложное свойство, так как оно включает точку. Далее он натыкается на внутренние дескрипторы, которые следует обработать по другому. Поскольку GradientStop реализует интерфейс IList, то анализатор считает, что должен быть вызван метод IList.Add().

Если свойство поддерживает более одного вида коллекций, то нудно указать класс коллекции явно:

        <Grid.Background>

            <LinearGradientBrush>

                <LinearGradientBrush.GradientStops>

                    <GradientStopCollection>

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

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

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

                    </GradientStopCollection>

                </LinearGradientBrush.GradientStops>

            </LinearGradientBrush>

        </Grid.Background>

Не во всех случаях вложенное содержимое обозначат коллекцию. Например, мы в элемент Grid можем добавлять кнопки, текстовые поля и прочие элементы. Но сам объект Grid не является коллекцией. Однако, Grid поддерживает атрибут ContentProperty, который указывает на свойство, которое должно принимать любое вложенное содержимое. Технически атрибут ContentProperty применяется к классу Panel от которого унаследован Grid и связан со свойством Children.

Анализатор XAML трактует ContentProperty по разному, в зависимости от того реализует ли оно интерфейс IList или нет. Например, если поместить что нибудь внуть тэга <Button> или <TextBox>, то анализатор XAML воспримет этот как значение свойства Content, которое можно задать и явно:

Windows Presentation Foundation (WPF). Урок 4. Некоторые особенности XAML, о которых следует знать.

Но внутрь тэга <Button> можно поместить не только текст, а например, другой объект:

Windows Presentation Foundation (WPF). Урок 4. Некоторые особенности XAML, о которых следует знать.

Туда можно даже поместить другую кнопку:

Windows Presentation Foundation (WPF). Урок 4. Некоторые особенности XAML, о которых следует знать.

Можно даже навестить на обе эти кнопки события:

        private void Button_Click(object sender, RoutedEventArgs e)

        {

            MessageBox.Show("Проба");

        }

 

        private void button1_Click(object sender, RoutedEventArgs e)

        {

            MessageBox.Show("Проба1");

        }

Правда, при нажатии на вложенную кнопку сработают оба события.

А вот что вы не сможете сделать, так это сделать у кнопочки или подобного ей элемента два и больше вложенных объектов:

Windows Presentation Foundation (WPF). Урок 4. Некоторые особенности XAML, о которых следует знать.

Теперь поговорим о специальных символах и пробелах. Язык XAML ограничен правилам XML. А значит, если вы хотите указать, например, символ < или > то не сможете этого сделать, так как анализатор будет думать, что это тэги. Где же выход? А выход есть. Таким символы генерируются специальными кодами:

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