.
Windows Presentation Foundation (WPF). Урок 5. XAML Использование типов из других пространств имен
Автор megabax   
25.02.2013 г.
http

Windows Presentation Foundation (WPF). Урок 5. XAML Использование типов из других пространств имен

Это последний урок из серии "Windows Presentation Foundation (WPF).", публикуемый в бесплатном разделе. Начиная со следующего, публикация уроков будет продолжена в платном разделе. В бесплатном же разделе, возможно, иногда будут публиковать некоторые статьи, посвященные методике программирования на WPF.

Для того, что бы использовать типы из пространств имен, которых нет в WPF, необходимо отобразить пространство имен .NET на пространство имен XML. В XAML для этого предусмотрен специальный синтаксис:

xmlns:<Префикс>="clr:namespace:<Пространство имен>;assembly=<Имя сборки>"

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

xmlns:sys="clr-namespace:System;assembly=mscorlib"

что позволит использовать тип DateTime, например, вот таким образом?

<sys:DateTime>05/30/2009 5:22:11 PM</sys:DateTime>

Рассмотрим это на примере заполнения ListBox:

<Window x:Class="WpfApplication1.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:sys="clr-namespace:System;assembly=mscorlib"

         Title="MainWindow" Height="350" Width="525">

    <Grid>

        <ListBox Height="138" HorizontalAlignment="Left" Margin="25,18,0,0" Name="listBox1" VerticalAlignment="Top" Width="195">

            <ListBoxItem Content="Элемент 1" />

            <ListBoxItem Content="Элемент 2" />

            <sys:DateTime>05/30/2009 5:22:11 PM</sys:DateTime>

        </ListBox>

    </Grid>

</Window>

В результате мы получим вот такой вот макет*:

Windows Presentation Foundation (WPF). Урок 5. XAML Использование типов из других пространств имен

А действительно ли у нас добавилась в список именно DateTime? Давайте проверим. Добавим еще один ListBox и кнопочку*:

Windows Presentation Foundation (WPF). Урок 5. XAML Использование типов из других пространств имен

И напишем обработчик нажатия на кнопочку:

        private void button1_Click(object sender, RoutedEventArgs e)

        {

            for (int i = 0; i < listBox1.Items.Count; i++)

            {

                listBox2.Items.Add(listBox1.Items[i].GetType().ToString());

            }

        }

Запустим нашу программу. Вот что мы увидим при нажатии на кнопку:

Windows Presentation Foundation (WPF). Урок 5. XAML Использование типов из других пространств имен

Как видим, все правильно, третий элемент действительно имеет типа DateTime.

Точно так же можно добавить и строку:

<Window x:Class="WpfApplication1.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:sys="clr-namespace:System;assembly=mscorlib"

        Title="MainWindow" Height="350" Width="525">

    <Grid>

        <ListBox Height="138" HorizontalAlignment="Left" Margin="25,18,0,0" Name="listBox1" VerticalAlignment="Top" Width="195">

            <ListBoxItem Content="Элемент 1" />

            <ListBoxItem Content="Элемент 2" />

            <sys:DateTime>05/30/2009 5:22:11 PM</sys:DateTime>

            <sys:String>Это строка</sys:String>

        </ListBox>

        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="286,37,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />

        <ListBox Height="161" HorizontalAlignment="Left" Margin="250,82,0,0" Name="listBox2" VerticalAlignment="Top" Width="215" />

    </Grid>

</Window>

И проверить что добавилась действительно строка:

Windows Presentation Foundation (WPF). Урок 5. XAML Использование типов из других пространств имен

Аналогичным образом можно добавить и свой класс. Для этого нужно просто подключить локальное пространство имен (сборку при этом указывать не обязательно):

xmlns:loc="clr-namespace:WpfApplication1"

И теперь мы можем использовать классы из этого пространства имен:

<loc:MyClass a="23"></loc:MyClass>

Вот полный пример XAML:

<Window x:Class="WpfApplication1.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:sys="clr-namespace:System;assembly=mscorlib"

        xmlns:loc="clr-namespace:WpfApplication1"

        Title="MainWindow" Height="350" Width="525">

    <Grid>

        <ListBox Height="138" HorizontalAlignment="Left" Margin="25,18,0,0" Name="listBox1" VerticalAlignment="Top" Width="195">

            <ListBoxItem Content="Элемент 1" />

            <ListBoxItem Content="Элемент 2" />

            <sys:DateTime>05/30/2009 5:22:11 PM</sys:DateTime>

            <sys:String>Это строка</sys:String>

            <loc:MyClass a="23"></loc:MyClass>

        </ListBox>

        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="286,37,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />

        <ListBox Height="161" HorizontalAlignment="Left" Margin="250,82,0,0" Name="listBox2" VerticalAlignment="Top" Width="215" />

    </Grid>

</Window>

А вот реализация самого класса MyClass:

    public class MyClass

    {

        public int a {get; set;}

 

        public override string ToString()

        {

            return a.ToString();

        }

    }

Обратите внимание, что у такого класса доложены быть конструкторы без параметров. Если конструктора нет - то система объявляет конструктор без параметров неявно.

Теперь давайте проверим, что все это у нас работает:

Windows Presentation Foundation (WPF). Урок 5. XAML Использование типов из других пространств имен


Скриншоты, помеченные знаком *, являются цитатами и иллюстрациями  программного продукта "Microsoft Visual Studio 2010 Professional", авторское право на который принадлежит корпорации Microsoft.. 


 

 

 

Последнее обновление ( 25.02.2013 г. )