在另一个XAML文件中引用自定义资源

20

我正在尝试在一个XAML文件中创建新资源,并在另一个XAML文件中引用它。也就是说,我定义:

<Window.Resources>
    <ImageBrush x:Key="TileBrush" TileMode="Tile" ViewportUnits="Absolute" Viewport="0 0 32 32" ImageSource="MyImageButton.png" Opacity="0.3">
    </ImageBrush>
</Window.Resources>

尝试在另一个XAML文件中使用它:

<Grid>
    <Button Background="{StaticResource TileBrush}" Margin="5" Padding="5" FontWeight="Bold" FontSize="14">
        A Tiled Button
    </Button>
</Grid>

然而,我收到错误消息"StaticResource reference 'TileBrush' was not found."我可以从同一个XAML文件中引用该资源,但不知道如何从另一个文件中引用。


http://blogs.msdn.com/b/wpfsldesigner/archive/2010/06/03/creating-and-consuming-resource-dictionaries-in-wpf-and-silverlight.aspx - Lee Louviere
2个回答

29
在WPF中,资源引用工作方式类似于一棵树。每个控件都有自己的资源,子控件可以访问父控件的资源。全局应用程序资源字典位于App.xaml文件中。在此文件中,您可以将多个资源字典包含为合并字典。请参阅此代码示例:
<?xml version="1.0" encoding="utf-8"?>
<Application ...>
    <Application.Resources>
        <ResourceDictionary>
            <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="View\SomeFileDictionary.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

SomeFileDictionary.xaml位于我的项目结构中的View文件夹中,并且看起来像这样:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:ViewModel="clr-namespace:Cepha.ViewModel"
                xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                ... >

<DataTemplate DataType="{x:Type ViewModel:SomeType}">
    <TextBox .../>
</DataTemplate>...

这个文件(或App.xaml)中定义的每个字典键或数据模板都可以在您的项目的任何地方引用。希望这对您有帮助...


有一个“资源字典”的模板。我在“Windows Store Group”的“添加新项”对话框中找到了它。 - Stephen Hosking
1
是的,而且,如果您使用Blend模板添加资源字典,它还会创建合并的字典... - Raúl Otaño
3
你如何使用类库来完成这个任务? - Amen Jlili

0

你应该在app.xaml文件中定义这个。这些资源将在整个项目中共享。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接