资源通常是与某些对象相关联的定义,您希望这些对象使用的频率高于一次.它能够在本地为控件或当前窗口存储数据,或者为整个应用程序全局存储数据.
将对象定义为资源允许我们从其他位置访问它.因此,它允许可重用性.资源在资源字典中定义,任何对象都可以定义为有效的资源,使其成为可共享的资产.为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.您可以看到两个带蓝色前景色的文本块.资源的优点是,如果有多个文本块并且您想要更改其背景颜色,那么您只需要在资源字典中更改它.
资源在资源字典中定义,但有很多地方可以定义资源字典.在上面的示例中,资源字典在Window/page级别定义.在什么字典中定义资源会立即限制该资源的范围.所以范围,即你可以使用资源的位置,取决于你定义它的位置.
定义资源在网格的资源字典中,它只能由该网格及其子元素访问.
在窗口/页面上定义它并且所有人都可以访问它该窗口/页面上的元素.
可以在App.xaml资源字典中找到App根目录.它是我们应用程序的根,因此这里定义的资源范围限定为完整的应用程序.
至于资源的范围关注的是,最常见的是应用程序级别,页面级别和特定元素级别,如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>
当编译并执行上述代码时,它将产生以下输出 :
我们建议你执行上面的代码并尝试一些更多的资源,比如背景颜色等.