也许有人会帮助我。我一直在努力寻找在WindowsPhone项目上共享样式和资源的解决方案。
问题如下:
我有一个由两个WP项目使用的通用程序集。在这个程序集中,我定义了一些样式和数据表。我希望在公共程序集中定义一个datatemplates,并将其作为项目的默认datatemplate。
程序集资源字典示例代码:
<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项目的app.xaml中的两个资源字典:
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Assembly;component/Resources/Style.xaml" />
<ResourceDictionary Source="Resources/LocalStyle.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
根据MSDN,这应该是可能的。但实际上这不起作用。 datatemplate不反映重新定义的样式并使用默认样式。
这是一个错误还是我做错了?
非常感谢任何形式的帮助。
答案 0 :(得分:0)
我认为你误解了这篇文章。查找StaticResource
始终从元素开始,然后沿树向上走。
TopItemsTemplate
在公共Style.xaml
中定义,因此模板中的任何{StaticResource}
引用都会首先在Button
(找不到)中查找匹配,然后{ {1}}(未找到),然后是DataTemplate
的{{1}}(已找到)。如果在ResourceDictionary
中找不到任何内容,那么它将继续尝试在合并字典中找到一个。
如果将Style.xaml
移动到另一个字典(因此合并的字典有3个源而不是2个),它可能会起作用,但我不是百分百肯定。