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