WPFの画面でジェネリック・クラスを継承
WPFの画面でジェネリック・クラスを継承させることってできるのかな? と思い調べてみたらできました。
こんな感じです。
まず、継承させるジェネリック・クラスを作成します。
namespace WpfBaseWindow { public abstract class BaseWindow<T> : System.Windows.Window where T : BaseWindow<T> { } }
そして、このBaseWindowを継承した画面を作成します。
C#のコード
public partial class MyWindow: BaseWindow<MyWindow> { public MyWindow() { InitializeComponent(); } }
xamlコード
<base:BaseWindow x:Class="Sample.MyWindow" x:TypeArguments="local:MyWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:Sample" xmlns:base="clr-namespace:WpfBaseWindow;assembly=WpfBaseWindow" Title="MyWindow" Height="1024" Width="1280" WindowStartupLocation="CenterScreen"> <Grid> ・・・ </Grid> </base:BaseWindow>
xamlでは「x:TypeArguments」を使ってジェネリックの制約型引数をコンストラクターに渡すことができるみたいです。