2

おそらく誰かが私を助けてくれるでしょう。私は一日中、WindowsPhoneプロジェクトでスタイルとリソースを共有するための解決策を見つけようとしています。

問題は次のとおりです。

2つのWPプロジェクトで使用される共通のアセンブリがあります。このアセンブリ内には、いくつかのスタイルとデータテンプレートが定義されています。データテンプレートの1つを共通アセンブリで定義し、プロジェクトのデフォルトのデータテンプレートにします。

アセンブリリソースディクショナリのサンプルコード:

<Style TargetType="TextBlock" x:Key="TopItemsTitle">
    <Setter Property="FontSize" Value="18"></Setter>
    <Setter Property="FontFamily" Value="Segoe WP Black"></Setter>
    <Setter Property="Foreground" Value="Red"></Setter>
</Style>

<DataTemplate x:Key="TopItemsTemplate">
    <Button>
        <TextBlock x:Name="Name"
                   Grid.Row="1"
                   Width="172"
                   Height="25"
                   Margin="0,6,0,50"
                   VerticalAlignment="Bottom"
                   Text="{Binding Name}"
                   TextWrapping="Wrap" 
                   Style="{StaticResource TopItemsTitle}" />
    </Button>
</DataTemplate>

別のプロジェクト内で、TopItemsTitleスタイルを再定義したいと思います。次に例を示します。

<Style TargetType="TextBlock" x:Key="TopItemsTitle">
    <Setter Property="FontSize" Value="20"></Setter>
    <Setter Property="FontFamily" Value="Segoe WP"></Setter>
    <Setter Property="Foreground" Value="Blue"></Setter>
</Style>

次に、1つのWPプロジェクトのapp.xamlで両方のリソースディクショナリをマージします。

<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="/Assembly;component/Resources/Style.xaml" />
        <ResourceDictionary Source="Resources/LocalStyle.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

MSDNによると、これは可能であるはずです。ただし、実際にはこれは機能しません。データテンプレートは再定義されたスタイルを反映せず、デフォルトのスタイルを使用します。

これはバグですか、それとも単純に間違っていますか?

どんな種類の助けも大歓迎です。

4

1 に答える 1

0

あなたはその記事を誤解していると思います。ルックアップはStaticResource常に要素から始まり、ツリーを上っていきます。

TopItemsTemplateはcommonStyle.xamlで定義されているため{StaticResource}、テンプレート内の参照は、最初に(none found)で一致を検索しButton、次にDataTemplate(none found)、次にResourceDictionaryof Style.xaml(found)を検索します。に何も見つからなかった場合にStyle.xamlのみ、マージされた辞書で1つを見つけようとします。

を別の辞書に移動するTopItemsTitleと(つまり、マージされた辞書には2つではなく3つのソースがあります)、機能する可能性がありますが、100%確実ではありません。

于 2013-03-27T13:14:10.053 に答える