いくつかのユニバーサル アプリケーション バー メニュー項目をアクティブ化または非アクティブ化するためのいくつかの追加のブール依存関係プロパティを持つように、モバイル アプリケーションのベース ページを構成しています。これらの依存関係プロパティをデフォルト値に関するメタデータに登録していますが、値のセッターが呼び出されることはないようです。
public class MyPageBase : PhoneApplicationPage
{
public MyBasePage() {
DefaultStyleKey = typeof(MyPageBase);
}
public static readonly DependencyProperty ShowSettingsMenuItemProperty =
DependencyProperty.Register(
"ShowSettingsMenuItem",
typeof(bool),
typeof(MyPageBase),
new PropertyMetadata(true, ShowSettingsMenuItemChanged));
public static readonly DependencyProperty ShowLogoutMenuItemProperty =
DependencyProperty.Register(
"ShowLogoutMenuItem",
typeof(bool),
typeof(MyPageBase),
new PropertyMetadata(true, ShowLogoutMenuItemChanged));
}
次に、これら 2 つのプロパティをそれぞれの値に設定するページのデフォルトの「テーマ」を作成する必要があると考えました。ビルド アクションを Page に設定して、Themes フォルダーと Generic.xaml ファイルを内部に作成しました。次に、メタデータで 2 つのプロパティをデフォルト値に設定するページ タイプを対象とする非常に単純なスタイルを定義しました。
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:view="clr-namespace:MyApplication.View">
<Style TargetType="view:MyPageBase">
<Setter Property="ShowLogoutMenuItem" Value="True" />
<Setter Property="ShowSettingsMenuItem" Value="True" />
</Style>
</ResourceDictionary>
ただし、ベース ページのコンストラクターの最初の行にヒットすると、次の例外が発生します。
System.ArgumentException: 値が期待される範囲内にありません。
ILSpy でコンパイルされたライブラリを調べたところ、Resources フォルダーには、themes/generic.xaml 用のファイルを含む、プロジェクトのすべての XAML ファイルを含む g.resources フォルダーが含まれています。これらの依存関係プロパティの既定値を正しく初期化するには、何をする必要がありますか?