.Net Framework WPF

WPF 添付プロパティ(Attached Property)の実装方法

2017年11月18日

WPF でクラスインスタンスを利用する際に、クラスに対して直接プロパティを追加できないが、任意のプロパティを追加して利用したい状況があるかと思います。そのような場合、添付プロパティ(Attached Property)を利用することができます。

MainWindow.xaml.cs

コードビハインドで「propa」と入力してスニペットを挿入します。その後、適宜名前やメタデータを変更していきます。

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

public static double GetRecord(DependencyObject obj)
{
return (double)obj.GetValue(RecordProperty);
}

public static void SetRecord(DependencyObject obj, double value)
{
obj.SetValue(RecordProperty, value);
}

// Using a DependencyProperty as the backing store for Record. This enables animation, styling, binding, etc...
public static readonly DependencyProperty RecordProperty =
DependencyProperty.RegisterAttached("Record",
typeof(double),
typeof(MainWindow),
new FrameworkPropertyMetadata(0.0)
);

private void Button_Click(object sender, RoutedEventArgs e)
{
var btn = sender as Button;
Debug.WriteLine(btn.GetValue(RecordProperty));
}
}

MainWindow.xaml

追加した Record 添付プロパティに、double 値を設定します。

<Window x:Class="AttachedPropertyDemo.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:AttachedPropertyDemo"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button
Content="abc"
Height="30"
Width="200"
local:MainWindow.Record="3.0"
Click="Button_Click"/>
</Grid>
</Window>

関連情報:
WPF 依存関係プロパティ
http://kainobi2.blogspot.jp/2016/11/wpf.html

-.Net Framework, WPF