- XAML Tutorial
- XAML - Home
- XAML - Overview
- XAML - Environment Setup
- Writing XAML Aplication On MAC OS
- XAML Vs C# Code
- XAML Vs.VB.NET
- XAML - Building Blocks
- XAML - Controls
- XAML - Layouts
- XAML - Event Handling
- XAML - Data Binding
- XAML - Markup Extensions
- XAML - Dependency Properties
- XAML - Resources
- XAML - Templates
- XAML - Styles
- XAML - Triggers
- XAML - Debugging
- XAML - Custom Controls
- XAML Useful Resources
- XAML - Quick Guide
- XAML - Useful Resources
- XAML - Discussion
XAML - 资源
资源通常是与某些您希望多次使用的对象相关的定义。它能够在本地存储控件或当前窗口的数据,或者为整个应用程序全局存储数据。
将对象定义为资源允许我们从另一个地方访问它。因此,它允许可重用性。资源在资源字典中定义,任何对象都可以定义为资源,有效地使其成为可共享的资产。为 XAML 资源指定唯一键,并且可以使用该键通过使用 StaticResource 标记扩展来引用它。
让我们再次看一个简单的示例,其中使用一些属性创建两个文本块,并且它们的前景色在Window.Resources中定义。
<Window x:Class = "XAMLResources.MainWindow" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" Title = "MainWindow" Height = "350" Width = "604"> <Window.Resources> <SolidColorBrush Color = "Blue" x:Key = "myBrush"></SolidColorBrush> </Window.Resources> <StackPanel Orientation = "Vertical"> <TextBlock Foreground = "{StaticResource myBrush}" Text = "First Name" Width = "100" Margin = "10" /> <TextBlock Foreground = "{StaticResource myBrush}" Text = "Last Name" Width = "100" Margin = "10" /> </StackPanel> </Window>
当上面的代码被编译并执行时,将会产生如下的MainWindow。您可以看到两个前景色为蓝色的文本块。该资源的优点是,如果有多个文本块并且您想更改它们的背景颜色,那么您只需在资源字典中更改它即可。
资源范围
资源是在资源字典中定义的,但是有很多地方可以定义资源字典。在上面的示例中,资源字典是在窗口/页面级别定义的。在哪个字典中定义资源会立即限制该资源的范围。因此,范围(即您可以在哪里使用资源)取决于您定义它的位置。
在网格的资源字典中定义资源,并且该资源只能由该网格及其子元素访问。
在窗口/页面上定义它,该窗口/页面上的所有元素都可以访问它。
App根目录可以在App.xaml资源字典中找到。它是我们应用程序的根,因此此处定义的资源范围仅限于整个应用程序。
就资源的范围而言,最常见的是应用程序级别、页面级别和特定元素级别(如 Grid、StackPanel 等)。
资源词典
XAML 应用程序中的资源字典意味着单独文件中的资源字典。几乎所有 XAML 应用程序都遵循它。在单独的文件中定义资源具有以下优点 -
资源字典中的定义资源与UI相关代码分离。
在单独的文件(例如 App.xaml)中定义所有资源将使它们在整个应用程序中可用。
那么,我们如何在单独文件的资源字典中定义资源呢?嗯,这很简单,只需通过 Visual Studio 添加一个新的资源字典,步骤如下 -
在您的解决方案中,添加一个新文件夹并将其命名为ResourceDictionaries。
右键单击该文件夹,然后从“添加”子菜单项中选择“资源词典”,并将其命名为“DictionaryWithBrush.xaml”
让我们看一下同一个应用程序;现在只是在应用程序级别定义资源字典。
以下是 MainWindow.xaml 的 XAML 代码。
<Window x:Class = "XAMLResources.MainWindow" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" Title = "MainWindow" Height = "350" Width = "604"> <StackPanel Orientation = "Vertical"> <TextBlock Foreground = "{StaticResource myBrush}" Text = "First Name" Width = "100" Margin = "10" /> <TextBlock Foreground = "{StaticResource myBrush}" Text = "Last Name" Width = "100" Margin = "10"/> </StackPanel> </Window>
这是 DictionaryWithBrush.xaml 中的实现 -
<ResourceDictionary xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"> <SolidColorBrush Color = "Blue" x:Key = "myBrush"></SolidColorBrush> </ResourceDictionary>
这是 app.xaml 中的实现 -
<Application x:Class = "XAMLResources.App" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" StartupUri = "MainWindow.xaml"> <Application.Resources> <ResourceDictionary Source = " XAMLResources\ResourceDictionaries\DictionaryWithBrush.xaml" /> </Application.Resources> </Application>
当上面的代码被编译并执行时,它将产生以下输出 -
我们建议您执行上面的代码并尝试更多的资源,例如背景颜色等。