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

そして、依存関係プロパティが変更されたため、すべてのテキストが巨大です。今技術的に言えば..

microsoft world には依存関係プロパティがあり、その値は常に親コンポーネントから継承されます。例: (DataContext、FontFamily、FontSize など) これは、それらが明示的でない場合にのみ発生します (他の例外の中でも特に、それらを変更したり操作したりする人はいません)。

それらの 1 つを作成する方法やそれらがどのように機能するかを尊重しようとしたことはありませんが.. デフォルト値をオーバーライドして、アプリケーションのすべてのコンポーネントに拡張することができます。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...
    }

これは、任意の標準リソースで実行できます。これは、WPF としての DynamicResources がないため、この方法で行われます

注: StaticResource はどうですか。アプリケーションの実行中に変更すると、変更は反映されません。

英語が下手で申し訳ありませんが、それがあなたが知りたかったことであるかどうかはわかりませんが、私は何かを助けました.

于 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 に答える