Код программной части и XAML в WPF
Выделенный код — это термин, используемый для описания код, соединяемый с созданными в разметке объектами, когда XAML страницы, скомпилированного с разметкой. В этом разделе описываются требования для кода, а также альтернативный механизм встроенного кода для кода в XAML.
В этом разделе содержатся следующие подразделы.
Предварительные требования
В этом разделе предполагается, что вы прочитали Обзор XAML (WPF) и иметь базовые знания о CLR и объектно ориентированного программирования.
Код программной части и язык XAML
Язык XAML включает в себя возможности языка, которые позволяют связать файлы кода в файлах разметки, со стороны файла разметки. В частности, язык XAML определяет возможности языка директива x: Class, директива x: Subclass, и директива x: ClassModifier. Точно как код должен создаваться и как интегрировать разметки и кода, не является частью указывает на языке XAML. Он остается до платформ, таких как WPF, чтобы определить, как интегрировать код, как использовать XAML в приложение и модели программирования и построение действия или другие поддерживает, что все это требует.
Кода, обработчик событий и требования частичного класса в WPF
Разделяемый класс должен быть производным от типа, который возвращает корневой элемент.
Обратите внимание на то, что в группе по умолчанию поведение действий сборки для компиляции разметки, можно оставить наследование пустым в определении разделяемого класса со стороны кода. Скомпилированный результат предполагает резервный тип корневой страницы, чтобы служить основой для разделяемого класса, даже если он не указан. Тем не менее полагаться на это поведение не рекомендуется.
Обработчики событий, который включается в код программной части должны быть методами экземпляра и не может быть статическими методами. Эти методы должны быть определены разделяемым классом в пространстве имен CLR, определяемый
x:Class
. Нельзя уточнить имя обработчика событий, чтобы указать XAML процессора для поиска для обработчика событий для события, написанного в другой области класса.Обработчик должен соответствовать делегат для соответствующего события в системе резервных типов.
Для языка Microsoft Visual Basic в частности, можно использовать конкретного языка
Handles
ключевое слово, чтобы связать обработчики с экземплярами и событиями в объявлении обработчика, вместо присоединения обработчиков с атрибутами в XAML. Тем не менее, этот метод имеет некоторые ограничения, так какHandles
ключевое слово не поддерживает все функции WPF системы событий, такие как определенные сценарии перенаправленных событий или вложенные события. Дополнительные сведения см. в разделе Visual Basic и обработка событий WPF.
x: Code
x: Code определен элемент директивы в XAML. x:Code
Директива может содержать встроенный программный код. Код, определенный встроенным можно взаимодействовать с XAML на одной странице. В следующем примере показано встроенного кода C#. Обратите внимание, что код находится внутри x:Code
элемента и что код должен быть заключен в <CDATA[
... ]]>
для экранирования содержимое для XML, так что XAML процессора (Интерпретация либо XAML схемы или WPF схемы) не будет пытаться интерпретировать содержимое буквально как XML.
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="MyNamespace.MyCanvasCodeInline"
>
<Button Name="button1" Click="Clicked">Click Me!</Button>
<x:Code><![CDATA[
void Clicked(object sender, RoutedEventArgs e)
{
button1.Content = "Hello World";
}
]]></x:Code>
</Page>
Ограничения встроенного кода
Следует избегать или ограничивать использование встроенного кода. С точки зрения архитектуры и философии кодирования обеспечение разделения разметки и кода сохраняет ролей дизайнеры и разработчики гораздо больше отдельных. На более техническом уровне, код, написанный для встроенного кода может быть неудобно записи, так как вы записываете всегда в XAML создается разделяемый класс и можно использовать только сопоставления пространства имен XML по умолчанию. Поскольку невозможно добавить using
инструкций, необходимо полностью указать многие API вызовов. Значение по умолчанию WPF сопоставления включают большинство, но не все CLR пространства имен, которые присутствуют в WPF сборок; необходимо будет полностью определить вызовы к типам и членам, содержащихся в других пространствах имен среды CLR. Также любых других разделяемый класс не может определить во встроенном коде, и все сущности пользовательского кода, ссылки на которые должны существовать в качестве членов или переменных внутри созданного разделяемого класса. Другие программирования функции для конкретных языков, таких как макросы или #ifdef
глобальные переменные или переменные сборки, также не доступны. Дополнительные сведения см. в разделе встроенный тип XAML x: Code.