Почему XAML компилируется в BAML а не в C#

Действительно лучший способ сделать это состоит в том, чтобы установить обработчик для onFocus события и затем установить переменную на идентификатор элемента, который фокусируется.

что-то вроде этого:

var id;

$(":input").focus(function () {
     id = this.id;
});
27
задан Noctis 14 July 2017 в 00:18
поделиться

2 ответа

У меня есть совет относительно точки 3 (общий дизайн API):

Начало создания вашего API на конкретных сценариях использования ; Сделайте свой дизайн конкретным, а не общим - затем сделайте обобщение позже , если вы обнаружите, что API можно использовать повторно.

В прошлом я видел, как API были отредактированы до такой степени, что они стали настолько универсальными, что один из параметров метода - это объект «Параметры» или, что еще хуже, дерево DOM, соответствующее произвольной части XML; например Я хочу объяснить, что такое BAML.

На самом деле существует два способа обработки файла XAML: свободный или скомпилированный.

  1. Свободный файл XAML следует анализировать во время выполнения, и его можно развернуть как простой файл XML локально, удаленно или встроенным в сборку.
  2. Скомпилированный - это файл XAML, помеченный как «Страница» в Visual Studio (в MSBuild), развернутый как файл BAML (язык разметки двоичных приложений) и внедренный как ресурс сборки.

A Свободный файл XAML не может включать ключевое слово XAML x: Class , а также не может встраивать исходный код и ни в коем случае не может генерировать код. Можно загрузить свободный файл XAML, вызвав метод XamlReader.Load (), преобразовав возвращаемое значение в корневой элемент. Свободная версия XAML обеспечивает динамический способ загрузки и изменения представления, но обеспечивает низкую производительность из-за того, что XML-файл анализируется во время выполнения.

Скомпилированный XAML-файл (BAML) может генерировать код, используя x: Class , или, например, регистрируя события. Можно загрузить элемент изнутри BAML, вызвав Application.LoadComponent () , преобразовав возвращаемое значение в корневой элемент. Скомпилированная версия XAML обеспечивает лучшую производительность, поскольку она является предварительно токенизированной двоичной версией файла XAML, следовательно, она меньше по размеру и может загружаться быстрее, но не является динамической.

Когда-то давно существовал CAML. CAML был точной версией IL скомпилированного файла XAML. К сожалению, команда WPF решила устранить его и сохранить версию BAML по следующим причинам:

  1. BAML компактен, поэтому его можно загрузить быстрее (подходит для приложений XBAP)
  2. BAML представляет меньшую угрозу безопасности, чем выполнение кода (подходит для приложений XBAP)
  3. BAML может быть локализован после компиляции

Внизу В строке BAML немного медленнее IL, но у него больше преимуществ, чем у CAML.

23
ответ дан 28 November 2019 в 05:35
поделиться

Xaml отделен от кода C #, потому что он позволяет этим элементам «программно кодировать». Если вы скомпилируете код Xaml в C #, вы лишитесь этой характеристики, потому что теперь элементы пользовательского интерфейса, привязка данных, обработка событий и т. Д. Теперь жестко закодированы в программе, и вам нужно перекомпилировать всю программу, чтобы внести незначительные изменения в пользовательский интерфейс.

Сообщение в блоге, что петр к. В справочниках говорится, что Xaml когда-то был скомпилирован в IL, но теперь используется Baml, потому что:

  1. Он более безопасен (не может быть выполнен напрямую), и
  2. Baml может быть локализован (на разные языки) без необходимости перекомпиляции .
12
ответ дан 28 November 2019 в 05:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: