web-dev-qa-db-fra.com

Ressource personnalisée de référence définie dans un autre fichier xaml

J'essaie de créer une nouvelle ressource dans un fichier xaml et de la référencer dans un autre fichier xaml . Je définis 

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

Et essayez de l’utiliser dans un autre fichier xaml en

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

Cependant, je reçois l’erreur "La référence 'TileBrush' de StaticResource n’a pas été trouvée." Je peux référencer la ressource à partir du même fichier xaml mais je ne sais pas comment le faire à partir d'un autre fichier.

17
user1400716

Dans WPF, les références de ressource fonctionnent comme un arbre. Chaque contrôle possède une ressource et le contrôle des enfants peut accéder aux ressources du parent. Le dictionnaire de ressources d'application global est dans le fichier App.xaml. Dans ce fichier, vous pouvez inclure plusieurs dictionnaires de ressources en tant que dictionnaire fusionné. Voir cet exemple de code:

<?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>

Le SomeFileDictionary.xaml se trouve dans le dossier View de la structure de mon projet. Et a ressemble à ceci:

<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>...

Et chaque clé de dictionnaire ou modèle de données défini dans ce fichier (ou dans App.xaml) peut être référencé à n’importe quel endroit de votre projet. J'espère que cela t'aides... 

26
Raúl Otaño

Vous devez définir ceci dans le fichier app.xaml. Ces ressources sont partagées tout au long du projet

1
Kenneth