Директива x:FieldModifier
Изменяет поведение компиляции XAML таким образом, что поля для ссылок на именованные объекты определяются с использованием доступа TypeAttributes.Public, а не поведения TypeAttributes.NotPublic по умолчанию.
Использование атрибута XAML
<object x:FieldModifier="Public".../>
Значения XAML
Открытый |
Точная строка, передаваемая для указания TypeAttributes.Public или TypeAttributes.NotPublic, зависит от используемого языка программирования с выделенным кодом. См. примечания. |
Зависимости
Если при создании XAML где-либо используется x:FieldModifier, корневой элемент создания XAML должен объявить Директива x:Class.
Заметки
x:FieldModifier не относится к объявлению общего уровня доступа класса или его членов. Он относится только к поведению обработки XAML, когда обрабатывается определенный объект XAML, являющийся частью обработки создания XAML, и становится объектом, который потенциально может быть доступен в графе объектов приложения. По умолчанию ссылка на поле для такого объекта остается закрытой, что не дает потребителям элементов управления изменить граф объектов напрямую. Вместо этого ожидается, что потребители элементов управления будут изменять граф объектов с помощью стандартных шаблонов, включенных в моделях программирования, например путем получения корня структуры, коллекций дочерних элементов, выделенных открытых свойств и т. д.
Значение атрибута x:FieldModifier зависит от языка программирования, а его назначение зависит от конкретной платформы. Используемая строка зависит от того, как каждый язык реализует свой CodeDomProvider, от преобразователей типов, возвращаемых для определения значений TypeAttributes.Public и TypeAttributes.NotPublic, а также от того, учитывает язык регистр или нет.
В C# передаваемой строкой для назначения TypeAttributes.Public является public.
В Microsoft Visual Basic .NET передаваемой строкой для назначения TypeAttributes.Public является Public.
Для C++/CLI в настоящее время не существует целей для XAML, поэтому передаваемая строка не определена.
Можно также указать TypeAttributes.NotPublic (internal в C#, Friend в Visual Basic), но указание TypeAttributes.NotPublic используется редко, так как NotPublic уже является поведением по умолчанию.
TypeAttributes.NotPublic является поведением по умолчанию, поскольку доступ к элементу, созданному XAML, нечасто требуется коду вне сборки, которая скомпилировала XAML. Архитектура безопасности WPF и поведение компилирования XAML не объявляют поля, в которых открыто хранятся экземпляры элементов, если явным образом не задать свойство x:FieldModifier и не разрешить тем самым открытый доступ.
x:FieldModifier применяется только для элементов с Директива x:Name, поскольку это имя используется для ссылки на открытое поле.
По умолчанию разделяемый класс для корневого элемента является открытым, но его можно объявить закрытым с помощью Директива x:ClassModifier. Директива x:ClassModifier также влияет на уровень доступа к экземпляру класса корневого элемента. x:Name и x:FieldModifier можно поместить в корневой элемент, но при этом всего лишь создается открытая копия поля корневого элемента, а действительный уровень доступа класса корневого элемента по-прежнему контролируется Директива x:ClassModifier.
См. также
Ссылки
Основные понятия
Код XAML и пользовательские классы для WPF