XAML：StaticResourceとStyleの利用

# 準備
`<sys:Double>`や`<sys:String>`を利用するために

```xml:MainWindow.xaml
<Window 
  x:Class="WpfApplicationTest1.MainWindow"
  ...省略...
  xmlns:sys="clr-namespace:System;assembly=mscorlib"  // 追加
  ...省略...
>
```
# StaticResource
StaticResourceを利用してボタンのプロパティを設定

```xml:MainWindow.xaml
  <Window.Resources>
    <sys:Double x:Key="BT_Width">120</sys:Double>
    <sys:Double x:Key="BT_Height">30</sys:Double>
    <sys:String x:Key="BT_Text">TestButton</sys:String>
  </Window.Resources>

  <StackPanel>
    <Button 
      Width="{StaticResource BT_Width}" 
      Height="{StaticResource BT_Height}" 
      Content="{StaticResource BT_Text}">
    </Button>
  </StackPanel>
```

# StaticResource & Style
スタイルを定義して適用

```xml:MainWindow.xaml
  <Window.Resources>
    <sys:Double x:Key="BT_Width">120</sys:Double>
    <sys:Double x:Key="BT_Height">30</sys:Double>
    <sys:String x:Key="BT_Text">TestButton</sys:String>
    <SolidColorBrush x:Key="BT_TextColor" Color="Red"/>
    <Style x:Key="BT_StyleA" TargetType="{x:Type Button}">
      <Setter Property="Width" Value="{StaticResource BT_Width}" />
      <Setter Property="Height" Value="{StaticResource BT_Height}" />
      <Setter Property="Foreground" Value="{StaticResource BT_TextColor}"/>
    </Style>
  </Window.Resources>

  <StackPanel Orientation="Horizontal">
    <Button Style="{StaticResource BT_StyleA}" Content="A"/>
    <Button Style="{StaticResource BT_StyleA}" Content="B"/>
  </StackPanel>
```
# Styleの継承
```xml:MainWindow.xaml
  <Window.Resources>
    <sys:Double x:Key="BT_Width">120</sys:Double>
    <sys:Double x:Key="BT_Height">30</sys:Double>
    <sys:String x:Key="BT_Text">TestButton</sys:String>
    <SolidColorBrush x:Key="BT_TextColorInfo" Color="Blue"/>
    <SolidColorBrush x:Key="BT_TextColorWarning" Color="Red"/>
    <Style x:Key="BT_BaseStyle" TargetType="{x:Type Button}">
      <Setter Property="Width" Value="{StaticResource BT_Width}" />
      <Setter Property="Height" Value="{StaticResource BT_Height}" />
    </Style>
    <Style x:Key="BT_StyleInfo" TargetType="{x:Type Button}" BasedOn="{StaticResource BT_BaseStyle}">
      <Setter Property="Foreground" Value="{StaticResource BT_TextColorInfo}" />
    </Style>
    <Style x:Key="BT_StyleWarning" TargetType="{x:Type Button}" BasedOn="{StaticResource BT_BaseStyle}">
      <Setter Property="Foreground" Value="{StaticResource BT_TextColorWarning}" />
    </Style>

  </Window.Resources>

  <StackPanel Orientation="Horizontal">
    <Button Style="{StaticResource BT_StyleInfo}" Content="A"/>
    <Button Style="{StaticResource BT_StyleWarning}" Content="B"/>
  </StackPanel>
```

# リソースを外部ファイルに移動する
「新しい項目の追加」→「リソースディクショナリ(WPF)」→「Dictionary1.xaml」

```xml:Dictionary1.xaml
<ResourceDictionary
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:local="clr-namespace:WpfApplicationTest1"
  xmlns:sys="clr-namespace:System;assembly=mscorlib"> // 追加!
  <sys:Double x:Key="BT_Width">120</sys:Double>
  ...省略...
</ResourceDictionary>
```

```xml:MainWindow.xaml
  <Window.Resources>
    <ResourceDictionary Source="Dictionary1.xaml" />
  </Window.Resources>

  <StackPanel Orientation="Horizontal">
    <Button Style="{StaticResource BT_StyleInfo}" Content="A"/>
    <Button Style="{StaticResource BT_StyleWarning}" Content="B"/>
  </StackPanel>
```
MainWindow.xamlからは`xmlns:sys="clr-namespace:System;assembly=mscorlib"`を削除しても大丈夫。