4

MyClassLibrary という Silverlight クラス ライブラリがあります。

その中に、MyControl というユーザー コントロールがあります。

コントロール内で、ユーザー リソースを定義します。

<UserControl.Resources>
    <Style x:Key="ComboBoxStyle" TargetType="ComboBox">
       (lots of xaml)
    </Style>
</UserControl.Resources>

コントロールは、次のようなスタイルを使用します。

<ComboBox Style="{ StaticResource ComboBoxStyle }"></ComboBox>

これはすべて完全に機能し、ComboBox は適切なスタイルを提供するので、スタイルが正しく記述されていることがわかります。

私が本当に望んでいるのは、スタイルをリソース ディクショナリに配置して、このアセンブリ内の複数の異なるコントロールで使用できるようにすることです。そこで、SAME アセンブリ内にリソース ディクショナリを作成します。これを ResourceDictionary.xaml と呼びます。

スタイル定義をユーザー コントロールからリソース ディクショナリに移動します。

したがって、リソース ディクショナリは次のようになります。

<ResourceDictionary
xmlns="etc" >
    <Style x:Key="ComboBoxStyle" TargetType="ComboBox">
       (lots of xaml)
    </Style>
</ResourceDictionary>

コントロールのユーザー リソースは次のようになります。

<UserControl.Resources>
    <ResourceDictionary 
     Source="/MyClassLibrary;component/ResourceDictionary.xaml" x:Name="resDict"/>
</UserControl.Resources>

また、コントロールは以前とまったく同じ方法でスタイルを使用します。

「Source」属性をNonExistentFile.xamlに変更しようとしたため、ResourceDictionary.xamlファイルが見つかっていることがわかりましたが、ファイルが見つからないと不平を言いました。ResourceDictionary.xaml ではそのような不満は出ないので、見つけていると思います。

ただし、アプリを実行すると、「名前/キー ComboBoxStyle のリソースが見つかりません」というエラーが表示されます。

私は何を間違っていますか?これはとても単純なようで、うまくいきません。

あなたが私に与えることができる助けを前もって感謝します。

4

2 に答える 2

2

これが正確に役立つかどうかはわかりませんが、App.xamlにResourceDictionariesを含めます。

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Sausage/Bangers.xaml"/>
            <ResourceDictionary>
                .. other stuff, e.g.
                <helpers:NotOperatorValueConverter x:Key="NotOperatorValueConverter" />
            </ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

このアプローチが気に入らなくても、私のSource=があなたのものとは異なることがわかります。

于 2010-01-30T08:51:16.923 に答える
0

お二人に感謝します。あなたの回答により、実際に解決することができました。

私が実際に持っていたのは次のようなものでした:

<UserControl.Resources>
  <Style ...> stuff </Style>
</UserControl.Resources>

それから私を追加したので、このように見えました

<UserControl.Resources>
  <Style ...> stuff </Style>
  <ResourceDictionary Source="..." />
</UserControl.Resources>

これは非常に美しくコンパイルされましたが、実行されませんでした。MergedDictionaries を使用する必要があることを理解していませんでした。それで、そのコンセプトを得てセクションを再編成したところ、今ではすべてが美しく機能しています。

どうもありがとう!

于 2010-02-01T20:06:56.173 に答える