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

わんくま同盟

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

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

ツリー一括表示

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


親記事 / ▼[ 93696 ]
■93695 / 親階層)  XAMLのマークアップ拡張の指定方法
□投稿者/ たまじろ (1回)-(2020/01/14(Tue) 11:15:53)

分類:[C#] 

以下のXAMLでConverter={StaticResource DegToRad}としていますが
Converter={NewInstance local:DegreeToRadianConverter}
のように直接指定することはできないのでしょうか。
Converter={local:DegreeToRadianConverter}ではインスタンスを生成できないのでそのような定義になるのではと考えています。
マークアップ拡張にクラスを指定する場合は必ずStaticResourceの参照を行わなければならないのでしょうか。

<StackPanel xmlns:local="clr-namespace:atmarkit05">

  <StackPanel.Resources>
    <local:DegreeToRadianConverter x:Key="DegToRad"/>
  </StackPanel.Resources>

  <Slider x:Name="slider" Value="0" Minimum="0" Maximum="360" />
  <TextBox Text="{Binding ElementName=slider, Path=Value, Converter={StaticResource DegToRad}}" />

</StackPanel>

よろしくお願いします。

[ □ Tree ] 返信 編集キー/

▲[ 93695 ] / ▼[ 93697 ]
■93696 / 1階層)  Re[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にするのが性能的に良いんじゃないかとは思いますが。

[ 親 93695 / □ Tree ] 返信 編集キー/

▲[ 93696 ] / 返信無し
■93697 / 2階層)  Re[2]: XAMLのマークアップ拡張の指定方法
□投稿者/ たまじろ (2回)-(2020/01/14(Tue) 16:22:30)
2020/01/14(Tue) 16:22:54 編集(投稿者)

ありがとうございます。
色々頂いたサンプルでとても勉強になりました。

解決済み
[ 親 93695 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -