スポンサーリンク
明日を、もっと、ハッピーに!『ショップジャパン』
スポンサーリンク
プレミアムバンダイ

WPF StaticResourceとDynamicResourceの初期化

C#WPFXAML

WPFのStaticResourceは動的に値を変更できないと書かれている記事が多いですが、アプリケーション起動時にstaticコンストラクタから変更できます。

国際化する必要があり、StaticResourceのパフォーマンスが求められる場合で、尚且つ、対応言語分のXAMLやResource.resxファイル以外に、xmlやdatの独自言語ファイルを用意する必要がある場合、アプリケーション起動時にstaticコンストラクタで言語ファイルを読み込んで、各WPF画面のStaticResourceに展開するということが可能です。

 

StaticResourceサンプル

MainWindow.xaml

<Window x:Class=”VSShowFontDemo.MainWindow”
        xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”
        xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”
        xmlns:d=”http://schemas.microsoft.com/expression/blend/2008″
        xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006″
        xmlns:local=”clr-namespace:WpfApplication1″
        mc:Ignorable=”d”
        Title=”MainWindow” Height=”150″ Width=”225″>
    <Grid>
        <StackPanel Orientation=”Vertical”>
            <TextBlock x:Name=”textBlock” HorizontalAlignment=”Left” Margin=”13,14,0,0″ TextWrapping=”Wrap” Text=”{x:Static local:Disp.str}” VerticalAlignment=”Top”/>
        </StackPanel>
    </Grid>
</Window>

Disp.cs

public static class Disp
{
    public static string str { get; private set; } = “あああ”;

    static Disp()
    {
        str = “いいい”;
    }
}

 

DynamicResourceサンプル

App.xaml

<Application x:Class=”WpfApplication1.App”
             xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”
             xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”
             xmlns:local=”clr-namespace:WpfApplication1″
             xmlns:system=”clr-namespace:System;assembly=mscorlib”
             StartupUri=”MainWindow.xaml”>
    <Application.Resources>
        <system:String x:Key=”localizedMessage”>test</system:String>
    </Application.Resources>
</Application>

MainWindow.xaml

<Window x:Class=”WpfApplication1.MainWindow”
        xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”
        xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”
        xmlns:d=”http://schemas.microsoft.com/expression/blend/2008″
        xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006″
        xmlns:local=”clr-namespace:WpfApplication1″
        mc:Ignorable=”d”
        Title=”MainWindow” Height=”150″ Width=”225″>
    <Grid>
        <TextBlock x:Name=”textBlock” HorizontalAlignment=”Left” Margin=”13,14,0,0″ TextWrapping=”Wrap” Text=”{DynamicResource localizedMessage}” VerticalAlignment=”Top”/>
    </Grid>
</Window>

MainWindow.xaml.cs

/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();       

        App.Current.Resources[“localizedMessage”] = “テスト”;
    }
}

WPF開発 記事一覧

WPF

コメント

スポンサーリンク
アットコンタクト
スポンサーリンク
タイトルとURLをコピーしました