2023-11-13 (月)
[XAML] ResourceDictionary で定義した内容を static に参照する方法
XAML で定義した Resource を static に、C# 側で参照したり、x:static
でバインドする方法です。
環境
- .NET 7.0.403
- C# 11.0
- Visual Studio 2022 Version 17.7.6
- Windows 11 Pro 22H2 22621.2428
結果
定義例
ResourceDirectory に XAML でお好きな定義を書きます。
ResourceSample.xaml
の例
<ResourceDictionary x:Class="WpfApplication1.ResourceSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1">
<Style x:Key="{x:Static local:ResourceSample.ButtonStyleKey}" TargetType="Button">
<Setter Property="Background" Value="Green" />
</Style>
</ResourceDictionary>
C# 側で ResourceDictionary
を参照して、static プロパティを定義します。
new した後に InitializeComponent()
呼び出しが必要です。
ResourceSample.xaml.cs
の例
using System;
using System.Windows;
namespace WpfApplication1;
public sealed partial class ResourceSample
{
public const string ButtonStyleKey = "ButtonStyle";
public static Style ButtonStyle { get; }
static ResourceSample()
{
var resource = new ResourceSample();
resource.InitializeComponent();
ButtonStyle = resource[ButtonStyleKey] as Style ?? throw new InvalidOperationException();
}
}
使用例
使用する側は x:static
でお好きな場所で参照できます。
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:local="clr-namespace:WpfApplication1"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow"
Width="800"
Height="450"
mc:Ignorable="d">
<Button Style="{x:Static local:ResourceSample.ButtonStyle}" Content="Sample" />
</Window>
感謝
関連記事
新着記事