在另一个XAML文件中定义的参考自定义资源(Reference custom resource de

2019-08-19 03:57发布

我想创建一个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引用‘的TileBrush’没有被发现。” 我可以从同一个XAML文件中引用的资源,但不知道如何从另一个文件中这样做。

Answer 1:

在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中)定义的每个字典的键或数据的模板,可以在项目的任何地方引用。 希望这可以帮助...



Answer 2:

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



文章来源: Reference custom resource defined in another xaml file