1

WP 8 で ThemeManager を使用して、デフォルトのスタイルを変更しようとしています。色などのカスタマイズを含むリソース ファイルが 1 つあります。

私の ThemeResources.xml

<ResourceDictionary
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:System="clr-namespace:System;assembly=mscorlib">
    <Color x:Key="TestColor">#FF2c5f8c</Color>
    <SolidColorBrush x:Key="TestBrush" Color="{StaticResource TestColor}"/>
</ResourceDictionary>

今、私の App.xml im で、これをマージされた辞書として設定します:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
         <ResourceDictionary Source="Themes/ThemeResources.xaml"/>
        </ResourceDictionary.MergedDictionaries>
        <local:LocalizedStrings xmlns:local="clr-namespace:MyApp" x:Key="LocalizedStrings"/>
    </ResourceDictionary>
</Application.Resources>

私の App.cs では、アプリ コンストラクターで themeManager を使用します。

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

    // Standard XAML initialization
    InitializeComponent();

    // Phone-specific initialization
    InitializePhoneApplication();

    // Language display initialization
    InitializeLanguage();

    // Get the custom theme
    var rd = App.Current.Resources.MergedDictionaries[0];

    // Set custom Theme, fallback to dark
    ThemeManager.SetCustomTheme(rd, Theme.Light);
    ...

最後に、MainPage.xml で、次のように ThemeResources.xml で定義されたこの TestBrush を使用します。

<TextBlock Text="Testing" Foreground="{StaticResource TestBrush}"/>

私にはすべてが正しいように見えますが、アプリを実行しようとすると、次の例外が発生します。

$exception {System.Windows.Markup.XamlParseException: 名前/キー TestBrush のリソースが見つかりません [行: 90 位置: 175]

Visual Studio デザイナでは、カラー コレクトが表示されます。

そこで何が問題になる可能性がありますか?

編集:はい、ThemeResources.xmlファイルのビルドアクションは「リソース」に設定されています。それでも同じ問題です。

4

1 に答える 1

1

ThemeManager の readme を読む ( https://github.com/jeffwilcox/wp-thememanager ):

「注:後で必要になる(MergedDictionary セクションに配置する場合) 変更した ThemeResources.xaml には、テーマが設定された後に MergedDictionary を削除するプロセスの一部であるため、他のものを配置しないでください。何らかの理由で、 PhoneForegroundBrush が設定されたままにならないでください。」

私はまだ試していませんが、TestBrush を保持したい場合は、別の XAML ファイルで定義する必要があると思います。それ以外の場合は、標準のテーマ ブラシの 1 つを再定義して、代わりに使用してください。

于 2014-03-26T11:42:07.560 に答える