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 项目的 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

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

TopItemsTemplate是在 common 中定义的Style.xaml,因此模板中的任何{StaticResource}引用都会首先在 (none found) 中查找匹配Button项,然后是DataTemplate(none found),然后是ResourceDictionaryof Style.xaml(found)。如果在 中没有找到Style.xaml,只有这样它才会继续尝试在合并的字典中找到一个。

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

于 2013-03-27T13:14:10.053 回答