Xaml-resources
XAML-リソース
リソースは通常、複数回使用することが予想されるオブジェクトに関連付けられた定義です。 コントロールや現在のウィンドウのデータをローカルに保存したり、アプリケーション全体にグローバルに保存したりできます。
オブジェクトをリソースとして定義すると、別の場所からアクセスできます。 したがって、再利用可能になります。 リソースはリソースディクショナリで定義され、任意のオブジェクトをリソースとして定義して、共有可能なアセットにすることができます。 一意のキーがXAMLリソースに指定され、そのキーを使用して、StaticResourceマークアップ拡張機能を使用して参照できます。
いくつかのプロパティを使用して2つのテキストブロックを作成し、それらの前景色を Window.Resources で定義する簡単な例をもう一度見てみましょう。
<Window x:Class = "XAMLResources.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
Title = "MainWindow" Height = "350" Width = "604">
<Window.Resources>
<SolidColorBrush Color = "Blue" x:Key = "myBrush"></SolidColorBrush>
</Window.Resources>
<StackPanel Orientation = "Vertical">
<TextBlock Foreground = "{StaticResource myBrush}"
Text = "First Name" Width = "100" Margin = "10"/>
<TextBlock Foreground = "{StaticResource myBrush}"
Text = "Last Name" Width = "100" Margin = "10"/>
</StackPanel>
</Window>
上記のコードをコンパイルして実行すると、次のMainWindowが生成されます。 青い前景色の2つのテキストブロックを見ることができます。 リソースの利点は、複数のテキストブロックがあり、それらの背景色を変更する場合、リソースディクショナリで変更するだけでよいことです。
リソース範囲
リソースはリソースディクショナリで定義されますが、リソースディクショナリを定義できる場所は数多くあります。 上記の例では、リソースディクショナリはウィンドウ/ページレベルで定義されています。 リソースが定義されているディクショナリでは、そのリソースの範囲がすぐに制限されます。 スコープ、つまり リソースを使用できる場所は、定義した場所によって異なります。
- グリッドのリソースディクショナリでリソースを定義すると、そのグリッドとその子要素のみからアクセスできます。
- ウィンドウ/ページで定義すると、そのウィンドウ/ページのすべての要素からアクセスできます。
- AppルートはApp.xamlリソースディクショナリにあります。 これがアプリケーションのルートであるため、ここで定義されるリソースはアプリケーション全体にスコープされます。
リソースの範囲に関する限り、ほとんどの場合、アプリケーションレベル、ページレベル、およびグリッド、StackPanelなどの特定の要素レベルです。
リソース辞書
XAMLアプリのリソースディクショナリは、別のファイルのリソースディクショナリを意味します。 これは、ほぼすべてのXAMLアプリで採用されています。 別のファイルでリソースを定義すると、次の利点があります-
- リソースディクショナリでのリソースの定義とUI関連のコードの分離。
- App.xamlなどの個別のファイルですべてのリソースを定義すると、それらのリソースはアプリ全体で利用可能になります。
では、別のファイルのリソースディクショナリでリソースを定義するにはどうすればよいでしょうか? まあ、それは非常に簡単です、次の手順でVisual Studioを介して新しいリソース辞書を追加するだけです-
- ソリューションで、新しいフォルダーを追加し、 ResourceDictionaries という名前を付けます。
- このフォルダーを右クリックし、[サブメニュー項目の追加]から[リソースディクショナリ]を選択して、 DictionaryWithBrush.xaml という名前を付けます。
同じアプリケーションを見てみましょう。リソースディクショナリのみがアプリレベルで定義されるようになりました。
MainWindow.xamlのXAMLコードを次に示します。
<Window x:Class = "XAMLResources.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
Title = "MainWindow" Height = "350" Width = "604">
<StackPanel Orientation = "Vertical">
<TextBlock Foreground = "{StaticResource myBrush}" Text = "First Name"
Width = "100" Margin = "10"/>
<TextBlock Foreground = "{StaticResource myBrush}" Text = "Last Name"
Width = "100" Margin = "10"/>
</StackPanel>
</Window>
これはDictionaryWithBrush.xamlの実装です-
<ResourceDictionary
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush Color = "Blue" x:Key = "myBrush"></SolidColorBrush>
</ResourceDictionary>
これはapp.xamlの実装です-
<Application x:Class = "XAMLResources.App"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri = "MainWindow.xaml">
<Application.Resources>
<ResourceDictionary Source = " XAMLResources\ResourceDictionaries\DictionaryWithBrush.xaml"/>
</Application.Resources>
</Application>
上記のコードをコンパイルして実行すると、次の出力が生成されます-
上記のコードを実行し、背景色などのリソースを試してみることをお勧めします。