3

我在我的共享项目中创建了一个 ResourceDictionary 没有问题。但是,我的一些样式对于 Windows Phone 8.1 来说非常特别*,并且不会在 Windows 8.1 中使用。由于 Windows Phone 项目中没有 App.xaml,我如何为 Windows Phone 指定 ResourceDictionary?

*除了大小和边距不同之外,PhoneAccentBrushWindows Store Apps 显然无法广泛使用。

或者,如果 Shared ResourceDictionary 是首选方法,我该如何使用PhoneAccentBrush和其他仅限 WP 的资源?

4

4 回答 4

1

Windows Phone 强调色可作为跨平台{ThemeResource SystemColorControlAccentColor}使用,并引用该链接:

这也适用于 Windows 8.1 应用程序,因此可以在通用应用程序中共享 XAML,并且仍然可以利用强调色。但由于 Windows 8.1 上不存在强调色,我们得到的颜色将始终是蓝莓。

您可能仍希望基于该颜色为资源等构建画笔,但这些可以进入共享的应用程序资源,例如:

<Application
    x:Class="My.Universal.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:My.Universal">
    <Application.Resources>
        <!-- This will always be Blueberry on Windows 8, but will follow the accent colour on Windows Phone 8 -->
        <SolidColorBrush x:Key="AccentBrush" Color="{ThemeResource SystemColorControlAccentColor}"/>
    </Application.Resources>
</Application>

如果您确实希望为不同平台拥有完全不同的资源,您可以将字典与两个项目中同一位置的字典合并 - 共享代码“神奇地”同时链接到两个项目

于 2014-06-13T11:43:03.333 回答
1

我自己也经历过同样的事情。我在共享项目中拥有我所有的样式/Assets/Themes/MySharedStyles.xaml

通用应用程序中共享内容的模型非常酷。如果您在两个项目中有一个具有相同名称(并且可能是类型)的类或页面,则它在共享项目中可用。

这意味着您可以将所有共享样式放在一个文件MySharedStyles.xaml中,然后在 Windows 和 Windows Phone 应用程序中创建一个资源字典“/Assets/MyPlatformSpecificStyles.xaml”。

在您的 Shared App.xaml 中,您可以执行以下操作:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="Assets/Themes/MySharedStyles.xaml" />
    <ResourceDictionary Source="Assets/Themes/PlatformSpecificStyles.xaml" />
</ResourceDictionary.MergedDictionaries>

PlatformSpecificStyles 将在设计时和运行时根据 VS 中的 Platform DropDown 从适当的项目中提取。

如果您只想覆盖项目中的某些细节,例如FontFamily在一个或另一个项目上换掉一个,您可以更改MySharedStyles文件中的特定字体,FontFamily="{TemplateBinding FontFamily}"然后您可以简单地将其设置在您在项目中使用该样式的位置。

这些策略有效,我今天在应用程序中使用它们。

于 2014-05-30T10:32:49.373 回答
1

由于 Windows Phone 项目中没有 App.xaml

这不可能是真的。没有 App.xaml,应用程序无法编译。您可能没有在共享项目中注意到它?

应用程序.xaml

我没有看到移动/复制到每个项目 App.xaml 的问题

于 2014-05-03T17:57:07.677 回答
0

电话特定资源(例如PhoneAccentBrush用于 Silverlight 8.0 应用程序的资源)将无法在通用应用程序中使用。

您可以使用相同的 App.xaml 文件来定义您的 ResourceDictionary、应用程序生命周期等。

但是,由于您要定义特定于手机的资源,因此您需要为 Windows Phone 8.1 和 Windows 8.1 提供一个单独的资源字典,并具有相同的资源名称。

于 2014-05-07T07:37:51.963 回答