Читайте также:
|
|
Логические (объектные) ресурсы – это произвольные объекты, ассоциированные с элементом WPF. Классы FrameworkElement и FrameworkContentElement определяют словарь Resources с типом System.Windows.ResourceDictionary. Этот словарь хранит коллекцию логических ресурсов элемента. С коллекцией Resources можно работать как в коде, так и в разметке XAML.В последнем случае объект, помещаемый в ресурс, должен обладать конструктором без параметров. Кроме этого, для определения ключа словаря в разметке требуется использовать атрибут x:Key из пространства имён анализатора XAML:
<!-- Определение ресурсов для кнопки в XAML-->
<Button x:Name="btn" Content="OK">
<Button.Resources>
<SolidColorBrush x:Key="background">
Yellow
</SolidColorBrush>
<SolidColorBrush x:Key="borderBrush">
Red
</SolidColorBrush>
</Button.Resources>
</Button>
// эквивалентное определение ресурсов для кнопки в коде
btn.Resources.Add("background", newSolidColorBrush(Colors.Yellow));
btn.Resources.Add("borderBrush", newSolidColorBrush(Colors.Red));
Чтобы сослаться на ресурс в разметке XAML, необходимо использовать расширения разметки {StaticResource} или {DynamicResource}.При этом указывается ключ ресурса. Анализатор XAML выполняет поиск ресурса по ключу, просматривая коллекцию ресурсов элемента, затем ресурсы родительского элемента, и так далее. Вот почему ресурсы обычно объявляются на уровне родительского окна или объекта Application.
<Window xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Window.Resources>
<SolidColorBrush x:Key="borderBrush">Red</SolidColorBrush>
</Window.Resources>
<Button Content="OK" BorderBrush="{StaticResource borderBrush}"/>
</Window>
При статической ссылке изменения ресурса после применения не влияют на целевой объект. При динамическом использовании любая модификация ресурса (даже после применения!) отразится на целевом объекте. Ниже показан пример статического и динамического применения ресурсов в коде:
// статическое применение ресурса с поиском по дереву элементов
button.Background = (Brush)button.FindResource("background");
// статическое применение ресурса из заданной коллекции ресурсов
button.Background = (Brush)window.Resources["background"];
// динамическоеприменениересурса
button.SetResourceReference(Button.BackgroundProperty, "background");
Определение логических ресурсов часто выносится в отдельныйXAML-файл, который в качестве корневого элемента содержит <ResourceDictionary>:
<ResourceDictionary xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Image x:Key="logo" Source="logo.jpg"/>
</ResourceDictionary>
ДлятогочтобыобъединитьресурсывфайлахсколлекциейResources, следуетиспользоватьсвойствоMergedDictionariesклассаResourceDictionary:
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="file1.xaml"/>
<ResourceDictionary Source="file2.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
13. ПРИВЯЗКА данных
Дата добавления: 2015-11-14; просмотров: 36 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Прочие элементы управления | | | Базовые концепции привязки данных |