XamlReader Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет обработчик обработчика XAML для анализа XAML и создания соответствующих деревьев объектов.
public ref class XamlReader sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class XamlReader final
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class XamlReader
Public NotInheritable Class XamlReader
- Наследование
- Атрибуты
Требования к Windows
Семейство устройств |
Windows 10 (появилось в 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (появилось в v1.0)
|
Примеры
В этом примере создается один эллипс из строки XAML, вызывая Load. Затем он подключает созданный, но отключенный элемент Ellipse к коллекции Children элемента, который уже существовал в работающем приложении UWP. Наконец, пример снова обращается к Ellipse в расположении, куда он был добавлен с помощью запроса, и изменяет одно из его свойств.
string xaml =
"<Ellipse Name=\"EllipseAdded\" Width=\"300.5\" Height=\"200\"
Fill=\"Red\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"/>";
object ellipse = XamlReader.Load(xaml);
//stackPanelRoot is the visual root of a Page in existing XAML markup already loaded by the appmodel
stackPanelRoot.Children.Add(ellipse as UIElement);
//walk the tree using XLinq result and cast back to a XAML type to set a property on it at runtime
var result = (from item in stackPanelRoot.Children
where (item is FrameworkElement)
&& ((FrameworkElement) item).Name == "EllipseAdded"
select item as FrameworkElement).FirstOrDefault();
((Ellipse) result).Fill = new SolidColorBrush(Colors.Yellow);
Комментарии
XamlReader — это служебный класс с методами, которые создают объекты на основе входных данных разметки XAML в строковой форме. XamlReader обеспечивает поведение создания объектов, параллельное анализу XAML с помощью средства синтаксического анализа СРЕДА ВЫПОЛНЕНИЯ WINDOWS XAML и использования XAML для определения пользовательского интерфейса приложения UWP.
При анализе входных данных XAML с помощью XamlReader.Load создаются деревья объектов времени выполнения среда выполнения Windows объектов. Дерево объектов предоставляет способ программирования для этих объектов во время выполнения путем обхода частей полного дерева.
При создании объектов из XAML с помощью метода XamlReader.Load важно понимать несколько понятий:
- Строка содержимого XAML должна определять один корневой элемент.
- Строка содержимого XAML должна иметь правильный формат XML, а также быть допустимой xaml.
- Содержимое XAML должно определять xmlns по умолчанию. Как правило, это среда выполнения Windows словарь XAML, определяемый по .
http://schemas.microsoft.com/winfx/2006/xaml/presentation
- Все пользовательские сборки, на которые ссылается сопоставление пространства имен XAML, уже должны быть доступны приложению.
- Xaml не должен пытаться указать атрибут x:Class или включать атрибуты, определенные XAML, для обработчиков событий.
- Вы не можете использовать FindName в общей области имен XAML, чтобы найти добавленный объект среды выполнения, но вы можете выполнить поиск в определенной области имен XAML для созданного объекта. Подробнее см. в разделе Области имен XAML.
- Логика создания объектов не может интегрировать загруженный КОД XAML с классами программной части во время выполнения. Если вы хотите добавить обработчики событий, это необходимо сделать в коде, ссылаясь на объекты, полученные из структуры дерева объектов результата Load , и используя синтаксис для присоединения обработчиков (например
+=
, ). - Должно быть существующее содержимое XAML; невозможно заменить все дерево содержимого. Необходимо по крайней мере сохранить исходный корневой элемент, чтобы оставаться активными последствия модели приложения для загруженной страницы XAML.
- Объект, созданный из load, можно назначить только одному расположению в основном дереве объектов. Если вы хотите добавить объекты, созданные из идентичного XAML, в разные области основного дерева объектов приложения, необходимо проанализировать XAML несколько раз, используя одну и ту же входную строку, используя разные назначения для возвращаемого значения.
- Оставшееся основное дерево объектов должно поддерживать соответствующее свойство для задания.
Методы
Load(String) |
Анализирует фрагмент XAML правильного формата, создает соответствующее дерево объектов и возвращает корень дерева объектов. |
LoadWithInitialTemplateValidation(String) |
При анализе фрагмента XAML правильного формата создается соответствующее дерево объектов и возвращается корень дерева объектов. Также выполняет проверку во время загрузки всех связанных шаблонов. |