Ресурсы в коде (WPF .NET)
В этом обзоре основное внимание уделяется доступу к ресурсам Windows Presentation Foundation (WPF) или созданию с помощью кода, а не синтаксиса XAML. Дополнительные сведения об общем использовании ресурсов и ресурсах с точки зрения синтаксиса XAML см. в обзоре ресурсов XAML.
Доступ к ресурсам из кода
Ключи, определяющие определенные ресурсы XAML, также используются для получения определенных ресурсов при запросе ресурса в коде. Самым простым способом извлечения ресурса из кода является вызов метода FindResource или TryFindResource из объектов уровня платформы в приложении. Разница в поведении между этими методами заключается в том, что происходит, если запрошенный ключ не найден. FindResource вызывает исключение. TryFindResourceне вызывает исключение, но возвращает.null
Каждый из этих методов принимает ключ ресурса в качестве входного параметра и возвращает объект со слабой типизацией.
Как правило, ключ ресурса является строкой, но иногда используются нестроки. Логика поиска разрешения ресурса кода такая же, как и в случае динамической ссылки на ресурс XAML. Поиск ресурсов начинается с вызывающего элемента, а затем продолжается через родительские элементы в логическом дереве. При необходимости поиск продолжается в ресурсах приложений, темах и системных ресурсах. Запрос кода для ресурса будет правильно учитывать изменения этих ресурсов, которые произошли во время выполнения.
В следующем примере кода показан Click обработчик событий, который находит ресурс по ключу и использует возвращаемое значение для задания свойства.
private void myButton_Click(object sender, RoutedEventArgs e)
{
Button button = (Button)sender;
button.Background = (Brush)this.FindResource("RainbowBrush");
}
Private Sub myButton_Click(sender As Object, e As RoutedEventArgs)
Dim buttonControl = DirectCast(sender, Button)
buttonControl.Background = DirectCast(Me.FindResource("RainbowBrush"), Brush)
End Sub
Альтернативным методом назначения ссылки на ресурс является SetResourceReference. Этот метод принимает два параметра: ключ ресурса и идентификатор определенного свойства зависимостей, присутствующих в экземпляре элемента, которому должно быть назначено значение ресурса. Функционально этот метод аналогичен, но имеет преимущество в том плане, что не требует приведения возвращаемых значений.
Еще одним способом программного доступа к ресурсам является доступ к содержимому свойства Resources как словаря. Словари ресурсов используются для добавления новых ресурсов в существующие коллекции, проверьте, используется ли данное имя ключа коллекцией и другие операции. Если вы пишете приложение WPF полностью в коде, вы также можете создать всю коллекцию в коде, назначить ресурсы ему. Затем коллекцию можно назначить Resources свойству элемента. Это описано в следующем разделе.
Вы можете индексировать в любой данной Resources коллекции, используя определенный ключ в качестве индекса. Доступ к ресурсам таким образом не соответствует обычным правилам среды выполнения разрешения ресурсов. Вы обращаетесь только к этой конкретной коллекции. Поиск ресурсов не проходит по области ресурсов корневому каталогу или приложению, если допустимый объект не найден в запрошенный ключ. Тем не менее в некоторых случаях этот подход может иметь преимущество в производительности, поскольку область поиска ключа более ограничена. Дополнительные сведения о том, как работать с словарем ресурсов напрямую, см. в ResourceDictionary классе.
Создание ресурсов с помощью кода
Пи создании приложения WPF полностью в коде может также понадобиться создать в коде все ресурсы в этом приложении. Для этого создайте новый экземпляр ResourceDictionary, а затем добавьте все ресурсы в словарь с помощью последовательных вызовов в ResourceDictionary.Add. Затем назначьте созданное ResourceDictionary Resources свойство для элемента, который присутствует в области страницы, или Application.Resources. Можно также работать с ResourceDictionary как с автономным объектом, не добавляя его в элемент. Однако в этом случае для доступа к ресурсам внутри него потребуется ключ элемента, как для общего словаря. Объект ResourceDictionary , который не присоединен к свойству элемента Resources
, не существует в составе дерева элементов и не имеет области в последовательности подстановки, которая может использоваться FindResource методами и связанными методами.
Использование объектов в качестве ключей
В большинстве случаев использования ресурса ключ ресурса устанавливается в виде строки. Однако различные функции WPF намеренно используют тип объекта в качестве ключа вместо строки. Возможность ключа ресурса с помощью типа объекта используется стилем WPF и поддержкой тем. Стили и темы, которые становятся по умолчанию для элемента управления, отличного от стиля, являются ключами Type элемента управления, к которому они должны применяться.
Ключи по типу предоставляют надежный механизм подстановки, который работает на экземплярах по умолчанию каждого типа элемента управления. Тип можно обнаружить отражением и использовать для стилизации производных классов, даже если производный тип в противном случае не имеет стиля по умолчанию. Ключ для ресурса, определенного в XAML, можно указать Type с помощью расширения разметки x:Type. Аналогичные расширения существуют для других нестроковых ключевых использования, поддерживающих функции WPF, такие как расширение разметки ComponentResourceKey.
Дополнительные сведения см. в статье Стили, DataTemplates и неявные ключи.
См. также
.NET Desktop feedback