Для чего служит x: thing в WPF?

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

Может ли кто-нибудь объяснить, что это такое и в каких ситуациях оно обычно используется?

Спасибо

редактировать:

<Window x:Class="WpfApplication8.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
    </Grid>
</Window>

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

edit2: поправьте меня, если я ошибаюсь:

Окно x:Class="WpfApplication8.MainWindow"

Приведенный выше код поместит класс, производный от Window, в пространство имен x:WpfApplication8.MainWindow, а

Окно x:Name="abc"

поместит в пространство имен x экземпляр класса Window с именем abc. Это правильно?

Если я прав, если бы я не использовал x псевдоним, где будут помещены как класс (первый случай), так и экземпляр (второй) случай? Нигде, немного похоже на анонимные типы? Они используются, но место, где они находятся, не определено?

2 ответа

Решение

Вы правы, это псевдоним пространства имен XML. Если вы посмотрите на верхнюю часть вашего файла xaml, вы обнаружите, что он отображается на http://schemas.microsoft.com/winfx/2006/xaml Пространство имен. Использование префикса позже позволяет парсеру xaml находить классы, определенные в этом пространстве имен, без необходимости вводить весь текст целиком. Это не похоже на using alias = very.long.namespace; синтаксис в C#.

Обычно вам нужно установить разные псевдонимы для каждого пространства имен, которое вы собираетесь использовать в файле xaml. Распространенным при использовании PRISM является картирование cal в clr-namespace:Microsoft.Practices.Composite.Presentation.Regions;assembly=Microsoft.Practices.Composite.Presentation; Вы можете получить доступ к RegionManager класс, определенный в этом пространстве имен CLR с помощью cal:RegionManager, При использовании Expression Blend вы часто обнаруживаете, что он добавляет xmlns:d="http://schemas.microsoft.com/expression/blend/2008" а также xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" чтобы позволить некоторые из его функциональных возможностей времени разработки (установка ширины и высоты для пользовательского элемента управления на артборде).


Ответ на редактирование вопроса: Возможно, вы захотите взглянуть на учебник по XML Namespace, из которого xaml наследует эту функциональность. В вашем примере вам нужно перестать думать о строках как об отдельных инструкциях, как это было бы в процедурном коде, и лучше рассматривать элемент в целом. Я пытаюсь сказать, что это потому, что xmlns:x появляется в Window элемент, он доступен этому элементу и каждому дочернему элементу, который он содержит, фактическая строка, в которой он появляется, не важна, поскольку xaml не выполняется сверху вниз, как процедурный код.


Ответ на вопрос edit 2: Атрибут x:Class сообщает компилятору, каким должно быть имя частичного класса, сгенерированного из файла xaml (если это то, что вы имели в виду, "поместит класс, производный от Window...", то ты прав).

Во второй части ничего не сказано, атрибут x:Name указывает компилятору сгенерировать поле в классе, содержащее ссылку на элемент, к которому прикреплен атрибут. Это означает, что в вашем примере ваш код за файлом сможет использовать this.abc для ссылки на элемент Window, определенный в разметке xaml.

Это псевдоним определения пространства имен.

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

Это действует как короткая рука или using/import заявление.

определив пространство имен в тегах атрибутов, аля x:Name, вы гарантируете, что используете правильный атрибут в правильном пространстве.

Возможно, вы заметили, что вам нужно добавить собственный псевдоним пространства имен сборки, если вы хотите использовать пользовательский элемент управления WPF.

Другие вопросы по тегам