Поделиться через


Выделенный код и XAML

Обновлен: Ноябрь 2007

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

В этом разделе содержатся следующие подразделы.

  • Необходимые компоненты
  • Требования для выделенного кода, обработчика событий и разделяемого класса
  • x:Code
  • Ограничения встроенного кода
  • Связанные разделы

Необходимые компоненты

Для понимания данного раздела необходимо ознакомиться с Общие сведения о XAML и иметь базовые знания о CLR и объектно-ориентированном программировании.

Требования для выделенного кода, обработчика событий и разделяемого класса

  • Разделяемый класс должен быть производным от типа класса, который был использован в качестве корневого элемента. В определении разделяемого класса с выделенном коде можно оставить наследование пустым, но скомпилированный результат будет считать корень страницы базовым классом для разделяемого класса, даже если он не задан (так как разметочная половина разделяемого класса установила в качестве базы корень страницы).

  • Создаваемые обработчики событий должны быть методами экземпляра, определенными разделяемым классом в пространстве имен CLR, идентифицированным по x:Class. Нельзя уточнить имя обработчика событий, чтобы указать обработчику XAML искать этот обработчик в другой области действия класса. Кроме того, нельзя использовать статические методы в качестве обработчика событий.

  • Обработчик должен соответствовать делегату для соответствующего события.

  • Специально для языка Microsoft Visual Basic .NET можно использовать ключевое слово (конкретно для этого языка) 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="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://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. В терминах архитектуры и философии кодирования обеспечение разделения между разметкой и выделенным кодом лучше разделяет роли конструктора и разработчика. На более техническом уровне код, написанный для встроенного кода, может быть неудобным в плане записи, поскольку разработчик всегда пишет в сгенерированном разделяемом классе страницы XAML и может использовать только сопоставления пространства имен XML по умолчанию. Поскольку нельзя добавить операторы using, следует полностью определять множество производимых вызовов API-интерфейс. Сопоставления WPF по умолчанию включают большинство, но не все пространства имен CLR, присутствующие в сборках WPF; понадобится полностью определять вызовы API-интерфейсы, содержащихся в других пространствах имен CLR. Также нельзя определить несколько классов во встроенном коде, и все сущности кода должны существовать в качестве членов или переменных внутри созданного разделяемого класса. Другие зависимые от конкретного языка программирования возможности, такие как макросы или #ifdef применительно к глобальным переменным или переменным построения, также недоступны. Дополнительные сведения см. в разделе x:Code — элемент директивы XAML.

См. также

Основные понятия

Общие сведения о XAML

Построение приложения WPF

Терминология синтаксиса XAML

Ссылки

x:Code — элемент директивы XAML