WindowsPhone项目默认如何加载资源?

时间:2012-07-02 19:51:02

标签: wpf silverlight windows-phone-7 xaml windows-phone-7.1

我喜欢Windows Phone项目加载默认资源的方式:

<phone:PhoneApplicationPage 
x:Class="PhoneApp4.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
shell:SystemTray.IsVisible="True">
    ...

PhoneFontFamilyNormal,PhoneFontSizeNormal,PhoneForegroundBrush。因为我正在为WPF创建许多库,并且所有这些库都包含一个公共库,并且我在考虑加载该库时,默认情况下还加载我的样式资源。

我如何实现这种方式?

顺便说一下,我正在使用WPF。

2 个答案:

答案 0 :(得分:1)

好吧,没有人回答我会尽力帮助你..

您可以在App.xaml中为所有应用程序使用定义资源(我想您已经知道了),示例:

xmlns:win="clr-namespace:System;assembly=mscorlib"

 <Application.Resources>
    <ResourceDictionary>
        <win:Double x:Key="MyBigFontStyle">186.667</win:Double>
        <!-- .... -->

和..申请中的页面:

<phone:PhoneApplicationPage x:Class="Project.Page"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
        xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
        FontFamily="{StaticResource PhoneFontFamilyNormal}"
        FontSize="{StaticResource MyBigFontStyle}"
<!-- .... --> 

由于依赖属性已更改,因此所有文本都是巨人。 从技术上讲,现在......

在microsoft世界中存在依赖项属性,其值始终从父组件继承。 示例:(DataContext,FontFamily,FontSize等) 这只有在它们不明确时才会发生(没有人修改,与它们交互,以及其他例外)。

虽然我从不寻求尊重如何创造其中一个或如何工作.. 您可以覆盖默认值以扩展到应用程序的所有组件。 对于Windows Phone,我使用了以下功能:

    public App()
    {
        // Global handler for uncaught exceptions.
        UnhandledException += Application_UnhandledException;

        // Standard Silverlight initialization
        InitializeComponent();

        // Phone-specific initialization
        InitializePhoneApplication();

        var myNewBrush = new SolidColorBrush(new Color { B = 255, A = 255, R = 88, G = 255 });
        this.Resources.Remove("PhoneAccentBrush");
        this.Resources.Add("PhoneAccentBrush", myNewBrush);

        // Other code that might be here already...
    }

这可以使用任何标准资源完成。 这样做是因为没有DynamicResources作为WPF

注意:StaticResource如何在运行应用程序的过程中更改它,不会传播您的更改。

对不起英语不好,不知道那是不是你想知道的,但我有所帮助。

答案 1 :(得分:0)

您必须在库中添加资源。

示例:

如果您有一个名为MyControl的自定义控件,则可以按如下所示定义资源。

public class MyControl
{
    public MyControl()
    {

       var myBrush = new SolidColorBrush(Colors.Red);
       this.Resources.Add("MyBrush", myBrush);
    }
}

然后,当您在WPF项目中添加对dll的引用时,您将通过您的控件获得该资源。

示例:

<my:MyControl Foreground="MyBrush">