web-dev-qa-db-ja.com

別のXAMLファイルで定義されたカスタムリソースを参照する

1つの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ファイルからリソースを参照できますが、別のファイルから参照する方法がわかりません。

17
user1400716

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)で定義されている各辞書キーまたはデータテンプレートは、プロジェクトの任意の場所で参照できます。お役に立てれば...

27
Raúl Otaño

これはapp.xamlファイルで定義する必要があります。これらのリソースはプロジェクト全体で共有されます

1
Kenneth