Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Работа с объектными (логическими) ресурсами
При построении приложения WPF часто приходится определять большой объем разметки XAML для использования во многих местах окна или возможно во множестве окон либо проектов. Например, пусть создана "безупречная" кисть с линейным градиентом, определение которой в разметке занимает 10 строк. Теперь кисть необходимо применить в качестве фонового цвета для каждого элемента
ButtonButtonХудшее, что можно было бы предпринять — копировать и вставлять одну и ту же разметку XAML в каждый элемент управления
ButtonК счастью, объектные ресурсы позволяют определить фрагмент разметки XAML, назначить ему имя и сохранить в подходящем словаре для использования в будущем. Подобно двоичным ресурсам объектные ресурсы часто компилируются в сборку, где они требуются. Однако в такой ситуации нет необходимости возиться со свойством Build Action. При условии, что разметка XAML помещена в корректное местоположение, компилятор позаботится обо всем остальном.
Взаимодействие с объектными ресурсами является крупной частью процесса разработки приложений WPF. Вы увидите, что объектные ресурсы могут быть намного сложнее, чем специальная кисть. Допускается определять анимацию на основе XAML, трехмерную визуализацию, специальный стиль элемента управления, шаблон данных, шаблон элемента управления и многое другое, и упаковывать каждую сущность в многократно используемый ресурс.
Роль свойства Resources
Как уже упоминалось, для применения в приложении объектные ресурсы должны быть помещены в подходящий объект словаря. Каждый производный от
FrameworkElementResourcesResourceDictionaryResourceDictionarySystem.ObjectВ инфраструктуре WPF все элементы управления плюс элементы
WindowPageUserControlFrameworkElementResourceDictionaryApplicationFrameworkElementОпределение ресурсов уровня окна
Чтобы приступить к исследованию роли объектных ресурсов, создайте в Visual Studio новый проект приложения WPF по имени
ObjectResourcesAppGridStackPanelButton<StackPanel Orientation="Horizontal"> <Button Margin="25" Height="200" Width="200" Content="OK" FontSize="20"/> <Button Margin="25" Height="200" Width="200" Content="Cancel" FontSize="20"/></StackPanel>Выберите кнопку OK и установите в свойстве
Background<Button></Button><Button Margin="25" Height="200" Width="200" Content="OK" FontSize="20"> <Button.Background> <RadialGradientBrush> <GradientStop Color="#FFC44EC4" Offset="0" /> <GradientStop Color="#FF829CEB" Offset="1" /> <GradientStop Color="#FF793879" Offset="0.669" /> </RadialGradientBrush> </Button.Background></Button>Чтобы разрешить использовать эту кисть также и в кнопке Cancel (Отмена), область определения
RadialGradientBrushRadialGradientBrushStackPanelКогда необходимо определить ресурс, для установки свойства
Resourcesх:Кеух:Keyх:Nameх:Nameх:КеуСреда Visual Studio позволяет переместить ресурс на более высокий уровень с применением соответствующего окна Properties. Чтобы сделать это, сначала понадобится идентифицировать свойство, имеющее сложный объект, который необходимо упаковать в виде ресурса (свойство
Background