(XAML#04)「リソースで数値や文字列を定義する」
昨日に続いてリソースについてのトピックです。WPFのリソース(Resourcesプロパティ)には、通常、WPF で使う型(クラス)の値を定義しますが、ここでは数値や文字列のような .NET Framework の基本型の値を定義することもできます。ただし、デフォルトでは基本型のための名前空間は生成されていないため、自分で追加する必要があります。
以下で、Window定義における「xmlns:system="clr-namespace:System;assembly=mscorlib"」は、コアアセンブリ(mscorlib)のSystem名前空間に対応するXML中の名前空間"system"を定義しています。こうすることで、基本型の値もリソースとして指定できるようになります。
<Window ...
xmlns:system="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="325" Width="525">
<Window.Resources>
<system:Double x:Key="MySize">24.0</system:Double>
<system:String x:Key="MyMessage">Hello, World!</system:String>
</Window.Resources>
<Grid>
<TextBlock FontSize="{StaticResource MySize}" Text="{StaticResource MyMessage}" />
</Grid>
</Window>
こうして定義したリソースは、Resources プロパティを使うことで、プログラムコードでも利用できます(従来のアセンブリリソースファイル(.resx)とは使い方が異なります)。
private void Button_Click(object sender, RoutedEventArgs e)
{
var msg = this.Resources["MyMessage"] as string; // string 型として取り出す
MessageBox.Show(msg); // ここでは取り出した結果をメッセージボックスで表示
}