web-dev-qa-db-ja.com

コードビハインドでStaticResourceを参照するにはどうすればよいですか?

XAMLでは、次のようにします。

<Button Style="{StaticResource NavigationBackButtonNormalStyle}" />

コードビハインドで同じことを行うにはどうすればよいですか?

16
Jerry Nixon

ページレベルのResourcesオブジェクトには、ローカル、アプリレベル、静的、およびテーマのリソースを検索する機能があります。これは、単にこれを行うことを意味します。

foo2.Style = this.Resources["NavigationBackButtonNormalStyle"] as Style;

頑張ってください!

20
Jerry Nixon

設計時に、_Resources[key]_を使用して「システムリソース」を解決しようとすると、リソースが見つからず、nullが返されるようです。たとえば、Resources[typeof(TextBox)]を使用してStyleのベースTextBoxを取得するには、nullが返されます。

代わりに、TryFindResource(key)を使用します。これは、最初に_Resources[key]_を試行し、次に「システムリソース」を検索して、探しているものを返すためです( [〜 #〜] msdn [〜#〜] および 参照ソース )。

言い換えれば、代わりにこれを試してください:

_var style = Application.Current.TryFindResource(key) as Style;
_
7
Josh Bowden

使用できる汎用ヘルパークラスは次のとおりです。このルートを使用する利点は、同じヘルパーを使用して他のタイプのリソース(BrushesやDataTemplateなど)を取得できることです。

public static class Helper
{
    public static T Get<T>(string resourceName) where T : class
    {
        return Application.Current.TryFindResource(resourceName) as T;
    }
}

そして、コードでどのように使用するか:

yourButton.Style = Helper.Get<Style>("NavigationBackButtonNormalStyle");

そして、あなたが使用するブラシリソースを取得したい場合

ItemTemplate = Helper.Get<DataTemplate>("MyDataTemplate");
1
Eternal21