本地和应用程序的资源

如果你只需要特定控件的给定资源,则可以通过将其添加到此特定控件而不是窗口来使其更加本地化。它的工作方式完全相同,唯一的区别是你现在只能从控件范围内进行访问:

<StackPanel Margin="10">
    <StackPanel.Resources>
        <sys:String x:Key="ComboBoxTitle">Items:</sys:String>
    </StackPanel.Resources>
    <Label Content="{StaticResource ComboBoxTitle}" />
</StackPanel>

在这种情况下,我们将资源添加到 StackPanel,然后从其子控件 Label 中使用它。StackPanel 内部的其他控件也可以使用它,就像这些子控件的子项可以访问它一样。但是,此特定 StackPanel 之外的控件无法访问它。

如果你需要能够从多个窗口访问资源,这也是可能的。App.xaml 文件可以包含与窗口和任何类型的 WPF 控件类似的资源,当你将它们存储在 App.xaml 中时,它们可以在项目的所有窗口和用户控件中全局访问。它的工作方式与从 Window 存储和使用时的工作方式完全相同:

<Application x:Class="WpfSamples.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:sys="clr-namespace:System;assembly=mscorlib"
             StartupUri="WPFApplication/ExtendedResourceSample.xaml">
    <Application.Resources>
        <sys:String x:Key="ComboBoxTitle">Items:</sys:String>
    </Application.Resources>
</Application>

使用它也是一样的 - WPF 将自动向上移动范围,从本地控件到窗口,然后到 App.xaml,以查找给定资源:

<Label Content="{StaticResource ComboBoxTitle}" />