1

Application.Resources の ResourceDictionary で奇妙な問題に直面しています。アプリケーション内の複数の ComboBoxes を埋めるために、データを ResourceDictionary に保存したいと考えています。

ただし、「その名前/キーを持つリソースが見つかりません...」というエラーが常に発生します。

ここに私のXAMLコード:

<Application.Resources>
    <ResourceDictionary x:Key="RDArray">
        <sys:String x:Key="item1">Item1</sys:String>
        <sys:String x:Key="item2">Item2</sys:String>
        <sys:String x:Key="item3">Item3</sys:String>
    </ResourceDictionary>
</Application.Resources>

<ListBox x:Name="lb" ItemsSource="{Binding Values, Source={StaticResource RDArray}}" />

いくつかの幸運な状況により、スタイルのような別のリソースを辞書の上に置くと問題が解決することがわかりました。

<Application.Resources>
    <Style x:Key="fubar" />
    <ResourceDictionary x:Key="RDArray">
        <sys:String x:Key="item1">Item1</sys:String>
        <sys:String x:Key="item2">Item2</sys:String>
        <sys:String x:Key="item3">Item3</sys:String>
    </ResourceDictionary>
</Application.Resources>

この「バグ」は、Silverlight だけでなく WPF アプリケーションでも発生します。

示されている「トリック」を使用してこれを解決できますが、このエラーがどこから来ているのか知りたいです。これについては何も見つかりませんでした。多分それは私だけであり、WPFのリソースについて間違っていることを理解しています。

4

2 に答える 2

4

これは、リソース セクションの唯一のアイテムとしてリソース ディクショナリがある場合、その内容が単に親ディクショナリに追加されるためです (私が詮索したところ、これが当てはまるようです)。これを回避するには、リソース ディクショナリを別の xaml ファイル (この場合は List.xaml) に配置する必要があります。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                     xmlns:sys="clr-namespace:System;assembly=mscorlib"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ResourceDictionary x:Key="RDArray">
        <sys:String x:Key="item1">Item1</sys:String>
        <sys:String x:Key="item2">Item2</sys:String>
        <sys:String x:Key="item3">Item3</sys:String>
    </ResourceDictionary>
</ResourceDictionary>

メインアプリでそれを参照します。

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="List.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>

<ListBox x:Name="lb" ItemsSource="{Binding Values, Source={StaticResource RDArray}}"/>
于 2011-03-21T10:42:13.767 に答える
0

ご回答有難うございます。私の実際のアプリケーションでは、その分離したファイルを作成しましたが、その中に 2 番目の ResourceDictionary を作成せず、そこに文字列値を配置しました。したがって、次のようになりました。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:sys="clr-namespace:System;assembly=mscorlib"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <sys:String x:Key="item1">Item1</sys:String>
    <sys:String x:Key="item2">Item2</sys:String>
    <sys:String x:Key="item3">Item3</sys:String>
</ResourceDictionary>

したがって、これももちろん機能しませんでした。

あなたの答えをありがとう、間違いなくこれを解決します。

于 2011-03-21T20:20:43.567 に答える