2

也许有人会帮助我。我一直在试图找到一种解决方案,以在我的WindowsPhone项目上共享样式和资源。跨程序集的合并词典和共享样式

存在的问题如下:

我有其中使用由两个WP项目共同的组件。在这个程序集里​​面我定义了一些样式和数据模板。我希望在普通程序集中定义其中一个数据模板,并将其作为项目的默认数据模板。

大会资源字典的示例代码:

<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> 

然后合并在应用这两个资源字典。一个WP项目的xaml:

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

根据到MSDN这应该是可以的。但实际上这是行不通的。数据模板不反映重新定义的样式并使用默认样式。

这是一个错误还是我简单做错了?

任何形式的帮助将不胜感激。

回答

0

我想你是误解了这篇文章。查找StaticResource总是从元素开始,然后向上走。

TopItemsTemplate在共用Style.xaml定义的,因此在模板任何{StaticResource}参考将首先查找在Button匹配(无发现),则DataTemplate(无找到),那么Style.xamlResourceDictionary(实测值)。如果在Style.xaml中找不到任何内容,那么只有这样才会继续尝试在合并的字典中找到一个。

如果您将TopItemsTitle移动到不同的字典(所以合并的字典有3个来源而不是2),它可能会工作,但我不是100%确定。

+0

谢谢@RobSiklos,您正确地将TopItemsTitle风格移到不同的字典中来解决问题。 其实我发现了别的东西,你不需要在通用的style.xaml字典上定义样式,你可以在它们各自的LocalStyle.xaml字典上为每个应用程序在本地定义它。 – Mike 2013-03-27 14:46:22