Control.DefaultStyleKey Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает или задает ключ, ссылающийся на стиль по умолчанию для элемента управления. Авторы пользовательских элементов управления используют это свойство для изменения стиля, используемого их элементом управления по умолчанию.
protected:
property Platform::Object ^ DefaultStyleKey { Platform::Object ^ get(); void set(Platform::Object ^ value); };
IInspectable DefaultStyleKey();
void DefaultStyleKey(IInspectable value);
protected object DefaultStyleKey { get; set; }
Protected Property DefaultStyleKey As Object
Значение свойства
Ключ, ссылающийся на стиль по умолчанию для элемента управления. Чтобы правильно работать в процессе поиска стиля темы, это значение должно быть значением System.Type .
Note
В C++ используется строка, которая является полным именем типа. Но это зависит от созданного кода, который создает TypeName после доступа к компилятору XAML; см. примечания.
Комментарии
DefaultStyleKey является одним из немногих защищенных свойств в API среда выполнения Windows. Он предназначен только для использования авторами элементов управления, которые будут подклассами некоторых существующих классов элементов управления и поэтому имеют необходимый доступ для задания этого свойства. Во многих сценариях пользовательского элемента управления, где вы будете задавать DefaultStyleKey, вы также переопределите OnApplyTemplate.
Возвращаемый тип DefaultStyleKey свободно типируется как объект в синтаксисе, но система стилей XAML ожидает, что значение будет предоставлять ссылку на тип:
- Для элемента управления с его логикой, написанной на C#, значение DefaultStyleKey должно быть экземпляром System.Type. Обычно это значение устанавливается в конструкторе по умолчанию:
public CustomControl1()
{
this.DefaultStyleKey = typeof(CustomControl1);
}
- Для элемента управления с логикой, написанной на языке C++, значение DefaultStyleKey должно быть строкой, соответствующей пространству имен, которая является именем пользовательского класса элемента управления. Обычно это значение устанавливается в конструкторе по умолчанию:
CustomControl1::CustomControl1() // public: in the header.
{
DefaultStyleKey(winrt::box_value(L"App1.CustomControl1"));
}
Note
В конечном счете строка не достаточно для поддержки ссылки на тип C++. Если в Обозреватель решений используются параметры добавления и создания нового элемента или шаблона элемента управления, шаблоны и поддержка C++ и XAML создают классы, которые предоставляют сведения IXamlMetadataProvider. Компилятор XAML может получить доступ к этому коду при загрузке XAML и использовать его для проверки и создания типов и членов и присоединения к частичным классам. Насколько вы определяете в собственном коде приложения, строка необходима. Но если вам интересно, вы можете просмотреть файлы XamlTypeInfo.g.h и XamlTypeInfo.g.cpp созданные файлы.
Авторы элементов управления могут не предоставлять значение defaultStyleKey, но это редко. Результатом будет то, что стиль по умолчанию — это стиль, определенный базовым классом. В некоторых случаях (например, для ContentControl) значение равно NULL. Даже если вы решили не переопределить значение, убедитесь, что исходный стиль по умолчанию полезен для отрисовки элемента управления.
При загрузке элемента управления XAML запускается процесс отрисовки, и система ищет правильный шаблон для применения, то, что загружается, является стилем XAML по умолчанию для элемента управления, включая его шаблон. Включенная в среда выполнения Windows является внутренней копией всех стилей по умолчанию для всех элементов управления XAML, которые определяет среда выполнения Windows. Ссылка на тип в DefaultStyleKey сообщает системе, которая называется ресурсом XAML для загрузки в качестве этого стиля. В форме XAML стили на самом деле ключом к типу, даже если нет механизма в среда выполнения Windows XAML, который определяет ссылку на тип явным образом. Но для любого значения TargetType , являющегося атрибутом, который содержит ключ для поиска, предполагается, что он неявно представляет ссылку на тип в виде строки. Например, DefaultStyleKey из кнопки — это экземпляр System.Type, где имя — Button, FullName — Windows. Пользовательского интерфейса. Xaml.Controls.Button. Система использует эти сведения для того, чтобы узнать, как загрузить стиль из внутренних ресурсов.TargetType="Button"
Пользовательские элементы управления обычно не используются в пространстве имен XAML по умолчанию. Вместо этого они используют пространство имен XAML, в котором используется инструкция : для ссылки на пространство имен кода приложения. По умолчанию проекты создают префикс local:, который сопоставляет это пространство имен для вас. Вы также можете сопоставить другие пространства имен XAML, чтобы ссылаться на дополнительные пространства имен кода для элементов управления или другого кода, который определяет ваше приложение.
Префикс "local:" (или другое пространство имен, которое сопоставляется с кодом и пространствами имен приложения) должно предшествовать имени пользовательского элемента управления, когда оно находится в XAML в качестве значения TargetType . Это также делается для вас начальными шаблонами; При добавлении нового элемента управления вы увидите файл generic.xaml, содержащий только один стиль. Этот стиль будет иметь значение TargetType , которое начинается с "local:" и завершено именем, выбранным для пользовательского класса элементов управления. Чтобы сопоставить предыдущие примеры, которые задают DefaultStyleKey в CustomControl1 определении, вы увидите элемент, <Style TargetType="local:CustomControl1"> определенный в начальном generic.xaml, и этот стиль определяет шаблон элемента управления, а также параметры других свойств.
Note
Префикс "local:" изолирован к XAML, где он определен и используется. Пространства имен XAML и префиксы имеют значение только в XAML и являются автономными для каждого ФАЙЛА XAML. Значения DefaultStyleKey в коде не включают префиксы.