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。您可以看到两个带有蓝色前景色文本块。资源的优点是,如果有多个文本块并且您想更改其背景颜色,则只需要在资源字典中更改它即可。

Resources

资源范围

资源在资源字典中定义,但是可以在许多地方定义资源字典。在上面的示例中,资源字典是在 Window/页面级别定义的。资源在哪个字典中定义会立即限制该资源的范围。因此,范围(即可以使用资源的位置)取决于您定义资源的位置。

  • 在网格的资源字典中定义资源,它只能被该网格及其子元素访问。

  • 在窗口/页面上定义它,它可以被该窗口/页面上的所有元素访问。

  • 应用程序根可以在 App.xaml 资源字典中找到。它是我们应用程序的根,因此此处定义的资源的范围是整个应用程序。

就资源的范围而言,最常见的是应用程序级别、页面级别和特定元素级别,例如 Grid、StackPanel 等。

Resource Scope

资源字典

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>

编译并执行上述代码后,将生成以下输出:

Resources

我们建议您执行上述代码并尝试更多资源,例如背景颜色等。

广告
© . All rights reserved.