C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■93696 / 1階層)  XAMLのマークアップ拡張の指定方法
□投稿者/ Hongliang (950回)-(2020/01/14(Tue) 12:38:54)
public class InstanceProvider : MarkupExtension {
  public InstanceProvider(Type type) {
    this.m_Type = type;
  }
  private Type m_Type;
  public override object ProvideValue(IServiceProvider serviceProvider) {
    return Activator.CreateInstance(this.m_Type);
  }
}
こういうマークアップ拡張を書けば、
Converter={local:InstanceProvider {x:Type local:HogeConverter}}
のように記述できます。
(もちろん、HogeConverterがデフォルトコンストラクタを持っている必要あり)

あるいは、
public class HogeConverter : MarkupExtension, IValueConverter {
  public object Convert(略) { return value; }
  public object ConvertBack(略) { return value; }
  public override object ProvideValue(IServiceProvider serviceProvider) {
    return this;
  }
}
このようにコンバータにマークアップ拡張機能も追加すれば、
Converter={local:HogeConverter}
のように記述できます。

状態を持たない(引数とかで振る舞いが変わらない)コンバータであれば
StaticResourceにするのが性能的に良いんじゃないかとは思いますが。

編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←XAMLのマークアップ拡張の指定方法 /たまじろ →Re[2]: XAMLのマークアップ拡張の指定方法 /たまじろ
 
上記関連ツリー

XAMLのマークアップ拡張の指定方法 / たまじろ (20/01/14(Tue) 11:15) #93695
XAMLのマークアップ拡張の指定方法 / Hongliang (20/01/14(Tue) 12:38) #93696 ←Now
  └ Re[2]: XAMLのマークアップ拡張の指定方法 / たまじろ (20/01/14(Tue) 16:22) #93697 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信