0

我喜欢 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。

4

2 回答 2

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}"
<!-- .... --> 

由于依赖属性发生了变化,所有文本都是巨人。现在从技术上讲..

微软世界上有依赖属性,它们的值总是继承自父组件。示例:(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

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

抱歉英语不好,不知道这是否正是你想知道的,但我已经帮助了一些事情。

于 2012-07-04T02:07:43.427 回答
0

您必须在库本身中添加资源。

例子:

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

public class MyControl
{
    public MyControl()
    {

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

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

例子:

<my:MyControl Foreground="MyBrush">
于 2012-07-04T06:44:33.980 回答