Рейтинговые книги
Читем онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 537 538 539 540 541 542 543 544 545 ... 642

На этот раз в результате щелчка на кнопке Cancel цвет фона для кнопки Cancel изменяется, а цвет фона для кнопки ОК остается прежним. Причина в том, что расширение разметки {DynamicResource} способно обнаруживать замену внутреннего объекта, указанного посредством ключа, новым объектом. Как и можно было предположить, такая возможность требует дополнительной инфраструктуры времени выполнения, так что {StaticResource} обычно следует использовать, только если не планируется заменять объектный ресурс другим объектом во время выполнения с уведомлением всех элементов, которые задействуют данный ресурс.

Ресурсы уровня приложения

Когда в словаре ресурсов окна имеются объектные ресурсы, их могут потреблять все элементы этого окна, но не другие окна приложения. Решение совместно использовать объектные ресурсы в рамках приложения предусматривает их определение на уровне приложения, а не на уровне какого-то окна. В Visual Studio отсутствуют способы автоматизации такого действия, а потому необходимо просто вырезать имеющееся определение объекта кисти из области Windows.Resource и поместить его в область Application.Resources файла Арр.xaml.

Теперь любое дополнительное окно или элемент управления в приложении в состоянии работать с данным объектом кисти. Ресурсы уровня приложения доступны для выбора при установке свойства Background элемента управления (рис. 27.5).

На заметку! Помещение ресурса на уровень приложения и назначение его свойству элемента управления приводит к замораживанию ресурса, что препятствует изменению значений во время выполнения. Ресурс можно клонировать и модифицировать клон.

Определение объединенных словарей ресурсов

Ресурсов уровня приложения часто оказывается вполне достаточно, но они ничем не помогут, если ресурсы необходимо разделять между проектами. В таком случае понадобится определить то, что известно как объединенный словарь ресурсов. Считайте его библиотекой классов для ресурсов WPF; он представляет собой всего лишь файл .xaml, содержащий коллекцию ресурсов. Единственный проект может иметь любое требуемое количество таких файлов (один для кистей, один для анимации и т.д.), каждый из которых может быть добавлен в диалоговом окне Add New Item (Добавление нового элемента), открываемом через меню Project (рис. 27.6).

Вырежьте текущие ресурсы из области определения Application.Resources в новом файле МуBrushes.xaml и перенесите их в словарь:

<ResourceDictionary xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation

  xmlns:local="clr-namespace:ObjectResourcesApp"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <RadialGradientBrush x:Key="myBrush">

    <GradientStop Color="#FFC44EC4" Offset="0" />

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

    <GradientStop Color="#FF829CEB" Offset="1" />

    <GradientStop Color="#FF793879" Offset="0.669" />

  </RadialGradientBrush>

</ResourceDictionary>

Хотя данный словарь ресурсов является частью проекта, все словари ресурсов должны быть объединены (обычно на уровне приложения) в единый словарь ресурсов, чтобы их можно было использовать. Для этого применяется следующий формат в файле Арр.xaml (обратите внимание, что множество словарей ресурсов объединяются за счет добавления элементов ResourceDictionary в область ResourceDictionary.MergedDictionaries):

<Application.Resources>

  <ResourceDictionary>

    <ResourceDictionary.MergedDictionaries>

      <ResourceDictionary Source="MyBrushes.xaml"/>

    </ResourceDictionary.MergedDictionaries>

  </ResourceDictionary>

</Application.Resources>

Проблема такого подхода в том, что каждый файл ресурсов потребуется добавлять в каждый проект, нуждающийся в ресурсах. Более удачный подход к разделению ресурсов заключается в определении библиотеки классов .NET Core для совместного использования проектами, чем мы и займемся.

Определение сборки, включающей только ресурсы

Самый легкий способ построения сборки из одних ресурсов предусматривает создание проекта WPF User Control Library (.NET Core) (Библиотека пользовательских элементов управления WPF (.NETCore)). Создайте такой проект (по имени MyBrushesLibrary) в текущем решении,выбрав пункт меню AddNew Project (Добавить►Новый проект) в Visual Studio, и добавьте ссылку на него в проект ObjectResourcesApp.

Теперь удалите файл UserControll.xaml из проекта. Перетащите файл MyBrushes.xaml в проект MyBrushesLibrary и удалите его из проекта ObjectResourcesApp. Наконец, откройте файл MyBrushes.xaml в проекте MyBrushesLibrary и измените пространство имен х:local на clr-namespace:MyBrushesLibrary. Вот как должно выглядеть содержимое файла MyBrushes.xaml:

<ResourceDictionary

  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

  xmlns:local="clr-namespace:MyBrushesLibrary">

  <RadialGradientBrush x:Key="myBrush">

    <GradientStop Color="#FFC44EC4" Offset="0" />

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})
1 ... 537 538 539 540 541 542 543 544 545 ... 642
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Похожие на Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю книги

Оставить комментарий