6

XAML ファイルから 2 つのベクター画像を読み込むことになっている WPF ウィンドウがあります。(Expression Design で簡単に変更できるように、それぞれが別のファイルにあります。)

XAML ファイルを に含めると、MergedDictionary正常に動作します。私が使用するコードは次のとおりです。

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Images/LCCD logo.xaml" />
            <ResourceDictionary Source="Images/LCCD bottom image.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>

<Image Source="{Binding Source={StaticResource LCCDlogo}}" /> <!-- Simplified -->
<Image Source="{Binding Source={StaticResource LCCDbar}}" /> <!-- Simplified -->

ただし、ウィンドウのリソースにさらに追加する必要があります。新しいリソースはこの Window に属しているため、インクルード ファイルではなく同じファイルに配置する必要があります。

と の間に次のコードを追加する<Window.Resources><ResourceDictionary>、次のエラーが発生します。

コード

<Style TargetType="{x:Type tab:FabTabItem}">
        <Setter Property="Header" Value="{Binding Path=LabelText}"/>
        <Setter Property="HeaderTemplate">
            <Setter.Value>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" Margin="0,0,4,0">
                        <TextBlock Text="{Binding}" TextTrimming="CharacterEllipsis"/>
                    </StackPanel>
                </DataTemplate>
            </Setter.Value>
        </Setter>
    </Style>

警告

デザイナーは、キーのない 'ResourceDictionary' アイテムと同じコレクション内の他のアイテムが混在する辞書の読み込みをサポートしていません。'Resources' プロパティにキーのない 'ResourceDictionary' 項目が含まれていないこと、または 'ResourceDictionary' 項目がコレクション内の唯一の要素であることを確認してください。

そこで、<ResourceDictionary>タグを次のように変更します。

<ResourceDictionary x:Key="Images">

ただし、この Dictionary 内のリソースにアクセスする方法がわかりません。名前付きの内部からリソースを取得するにはどうすればよいですResourceDictionaryか?


編集

どうでも。これはコンパイルされますが、実行されません。

エラーは次のとおりです。

''Resources' プロパティは 'MainWindow' で既に設定されています。

他の方法でやらないといけないと思います。

4

2 に答える 2

9

MergedResourceDictionaryのMSDNページによると、MergedDictionaryで指定されているリソースディクショナリでリソースを定義することは合法ですが、一般的ではありません。上記のページから。

ソースを指定する代わりに、または指定されたソースから含まれるリソースに加えて、マージされたディクショナリとして指定されたResourceDictionary内にリソースを定義することは合法です。ただし、これは一般的なシナリオではありません。マージされたディクショナリの主なシナリオは、外部ファイルの場所からリソースをマージすることです。ページのマークアップ内でリソースを指定する場合は、通常、マージされたディクショナリではなく、メインのResourceDictionaryでリソースを定義する必要があります。

それで、これが機能するかどうか試してみてください。

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Images/LCCD logo.xaml" />   
            <ResourceDictionary Source="Images/LCCD bottom image.xaml" />
            <ResourceDictionary>
                <Style TargetType="{x:Type tab:FabTabItem}">
                    <Setter Property="Header" Value="{Binding Path=LabelText}"/>
                    <Setter Property="HeaderTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal" Margin="0,0,4,0">
                                    <TextBlock Text="{Binding}" TextTrimming="CharacterEllipsis"/>
                                </StackPanel>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>
于 2012-06-07T02:10:55.253 に答える
1

<Style>ファイルのさらに下、そのスタイルを使用する要素の親要素に移動することになりました。

これは最善の解決策ではありませんが、機能します。

于 2012-06-07T01:54:51.970 に答える