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

Значение свойства

Object

Platform::Object

IInspectable

Ключ, который ссылается на стиль по умолчанию для элемента управления. Для правильной работы при поиске стиля темы это значение должно быть значением System.Type .

Примечание

Расширения компонентов Visual C++ (C++/CX) используют строку, которая является полным именем типа. Но это зависит от созданного кода, который создает TypeName после доступа компилятора XAML; См. примечания.

Комментарии

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

Тип возвращаемого значения DefaultStyleKey в синтаксисе слабо типируется как Object , но система стилей XAML ожидает, что значение будет предоставлять ссылку на тип:

  • Для элемента управления, логика которого написана на языке C#, значение DefaultStyleKey должно быть экземпляром System.Type. Обычно это значение задается в конструкторе по умолчанию:
public CustomControl1()
{
    this.DefaultStyleKey = typeof(CustomControl1);
}
CustomControl1::CustomControl1() // public: in the header.
{
	DefaultStyleKey(winrt::box_value(L"App1.CustomControl1"));
}
  • Для элемента управления, логика которого написана в расширениях компонентов Visual C++ (C++/CX), значение DefaultStyleKey должно быть строкой с указанием пространства имен, которая является именем пользовательского класса элемента управления. Обычно это значение задается в конструкторе по умолчанию:
CustomControl1::CustomControl1() //public: in the header
{
    DefaultStyleKey = "App1.CustomControl1";
}

Примечание

В конечном счете одной строки недостаточно для поддержки ссылки на тип расширений компонентов Visual C++ (C++/CX). При использовании параметров Добавить/ Новый элемент / Шаблонный элемент управления в Обозреватель решений шаблоны и поддержка расширений компонентов Visual C++ (C++/CX) и 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 из button является экземпляром System.Type , где имя — "Button", а FullName — "Windows.UI.Xaml.Controls.Button". Система использует эти сведения для загрузки стиля из внутренних ресурсов с TargetType="Button".

Пользовательские элементы управления обычно не содержатся в пространстве имен XAML по умолчанию. Вместо этого они содержатся в пространстве имен XAML с оператором using: для ссылки на пространство имен кода приложения. По умолчанию проекты создают префикс local:, который сопоставляет это пространство имен. Вы также можете сопоставить другие пространства имен XAML, чтобы ссылаться на дополнительные пространства имен кода для элементов управления или другого кода, определяемого приложением.

Префикс "local:" (или другое пространство имен, сопоставляемое с кодом и пространствами имен приложения) должен предшествовать имени пользовательского элемента управления, если он находится в XAML в качестве значения TargetType . Это также уже сделано с помощью начальных шаблонов; При добавлении нового элемента управления вы увидите файл generic.xaml, содержащий только один стиль. Этот стиль будет иметь значение TargetType , представляющее собой строку, начинающуюся с "local:" и завершающуюся именем, выбранным для пользовательского класса элементов управления. Чтобы сопоставить предыдущие примеры, задающие DefaultStyleKey в CustomControl1 определении, вы увидите элемент для <Style TargetType="local:CustomControl1"> , определенный в начальном generic.xaml, и этот стиль определяет шаблон элемента управления, а также другие свойства.

Примечание

Префикс "local:" изолирован от XAML, где он определен и используется. Пространства имен XAML и префиксы имеют значение только в XAML и являются автономными для каждого файла XAML. Значения DefaultStyleKey в коде не включают префиксы.

Применяется к

См. также раздел