Пользовательский ресурс справки WPF, определенный в другом файле xaml

Я новичок в WPF и пытаюсь создать новый ресурс в одном файле 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 "не найден". Я могу ссылаться на ресурс из одного и того же файла xaml, но не знаю, как это сделать из другого файла.

Спасибо заранее.

Ответы

Ответ 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), можно ссылаться в любом месте вашего проекта. Надеюсь, это поможет...

Ответ 2

Вы должны определить это в файле app.xaml. Эти ресурсы распределены по всему проекту