Пространства имен .NET C# в XAML

На данный момент мы знаем какие пространства имен используются в XAML и каким пространствам имен C# они соответствуют, а также научились получать доступ к элементам управления, созданным в XAML из файлов отделенного кода и создавать с помощью этих файлов элементы управления, используя код C#. При этом, могут возникать ситуации, когда нам необходимо из кода XAML получить доступ к какому-либо объекту, созданному с использованием кода C#.

Пространства имен .NET C# в XAML

При создании нового проекта WPF Visual Studio по умолчанию добавляет в код XAML пространство имен текущего проекта. Вот, например, как выглядит это пространство имен для нашего первого приложения WPF:

<Window ....
        xmlns:local="clr-namespace:HelloWpf"
        ...
    <Grid>
    </Grid>
</Window>

Если открыть файл отделенного кода, то можно увидеть, что в коде C# пространство имен имеет как раз то самое название — HelloWpf. Таким образом, используя префикс local: мы можем получать доступ к объектам, созданным в коде C#. Например, создадим в C# новый класс:

public class Person
{ 
    public string Name { get; set; }
    public int Age { get; set; }
    
    public override string ToString()
    {
       return $"{Name} - {Age}";
    }
}

У этого класса переопределен метод ToString(). Теперь можно воспользоваться объектом этого класса в коде XAML, например, следующим образом:

<Window x:Class="HelloWpf.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:HelloWpf"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid Name="grid">
        </TextBox>
        <Button Width="200" Height="60" VerticalAlignment="Bottom" Margin="5,5,5,5" Click="Button_Click" x:Name="button">
             <Button.Content>
                <local:Person Name="Вася Пупкин" Age="20"/>
            </Button.Content>
        </Button>
    </Grid>
</Window>

Так как пространство имен проекта (HelloWpf) проецируется на пространство имен XAML с префиксом local, то все классы проекта используются в XAML в виде local:Название_Класса. Так в данном случае объект Person устанавливается в качестве содержимого кнопки через свойство Content. Для сложных объектов это свойство принимает их строковое представление, которое как раз и возвращается переопределенным методом ToString(). Теперь можно запустить приложение и увидеть результат:

Похожим образом мы можем подключать и другие пространства имен .NET для доступа к объектам, которые мы хотим использовать при работе с XAML. При этом, общие синтаксис подключения пространств имен выглядит следующим образом:

xmlns:префикс=»clr-namespace:пространство_имен;assembly=имя_сборки«

например, нам необходимо создать в XAML хэш-таблицу. Сделать это можно следующим образом:

<Window ....
        xmlns:dict="clr-namespace:System.Collections;assembly=mscorlib"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        ...
    <Window.Resources>
        <dict:Hashtable x:Key="table">
            <sys:Int32 x:Key="key1">7</sys:Int32>
            <sys:Int32 x:Key="key2">23</sys:Int32>
        </dict:Hashtable>
    </Window.Resources>
    <Grid>
       ....
    </Grid>
</Window>

Здесь мы определили два дополнительных пространства имен:

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

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

Итого

При необходимости мы можем использовать объекты из пространств имен .NET непосредственно в коде XAML, подключив эти пространства имен с использованием синтаксиса, показанного выше.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии