2013-04-02 22 views
16

Jestem nowy w WPF i próbuję utworzyć nowy zasób w jednym pliku xaml i odwołać go do innego pliku xaml. tj zdefiniowaćZasób niestandardowy odniesienia WPF zdefiniowany w innym pliku 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> 

i próbować używać go w innym pliku XAML przez

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

Jednakże pojawia się błąd "odniesienie StaticResource 'TileBrush' nie został znaleziony." Mogę odwołać się do zasobu z tego samego pliku xaml, ale nie wiem, jak to zrobić z innego pliku.

Z góry dziękuję.

+0

http://blogs.msdn.com/b/wpfsldesigner/archive/2010/06/03/creating-and-consuming-resource-dictionaries-in-wpf-and-silverlight.aspx –

Odpowiedz

23

W pliku WPF odwołania do zasobów działają jako drzewa. Każda kontrola ma zasoby, a kontrola nad dziećmi może uzyskać dostęp do zasobów rodzica. Globalny słownik zasobów aplikacji znajduje się w pliku App.xaml. W tym pliku możesz zamieścić kilka słowników zasobów jako połączony słownik. Zobacz ten przykładowy kod:

<?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 znajdujący się w folderze View mojego struktury projektu. I wygląda następująco:

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

i każdy klawisz lub słownika danych szablonu zdefiniowane w tym pliku (lub App.xaml), można odwoływać się w dowolnym miejscu projektu. Mam nadzieję, że to pomoże ...

+0

Dokładnie to, czego potrzebowałem. Znakomity. Dzięki. – user1400716

+0

Istnieje szablon dla 'Słownika zasobu'. Znalazłem go w oknie dialogowym 'Dodaj nowy element' w" Grupie Windows Store ". –

+1

Tak, a także, jeśli dodasz słownik zasobów za pomocą szablonu Blend, utworzy także scalone słowniki ... –

0

Powinieneś to zdefiniować w pliku app.xaml. Te zasoby są udostępniane w całym projekcie.