サーチ…
パラメーター
方法 | 説明 |
---|---|
ProvideValue | MarkupExtensionクラスにはオーバーライドするメソッドが1つしかないため、XAMLパーサーはこのメソッドによって提供された値を使用して、マークアップ拡張の結果を評価します。 |
備考
マークアップ拡張を実装して、属性使用量のプロパティ、プロパティ要素の使用量のプロパティ、またはその両方の値を提供できます。
属性値の指定に使用すると、マークアップ拡張シーケンスとXAMLプロセッサを区別する構文は、開始と終了の中括弧({と})が存在することになります。マークアップ拡張のタイプは、開始中括弧の直後の文字列トークンによって識別されます。
プロパティ要素の構文で使用される場合、マークアップ拡張は、プロパティ要素値を提供するために使用される他の要素と同じ視覚的に同じです:XAML要素宣言は、要素としてマークアップ拡張クラスを参照し、山括弧(<>)で囲みます。
詳細については、 https://msdn.microsoft.com/en-us/library/ms747254(v=vs.110).aspxを参照してください。
IValueConverterで使用されるマークアップ拡張
マークアップ拡張機能の最大の用途の1つは、IValueConverterを使いやすくするためです。下のサンプルでは、BoolToVisibilityConverterは値コンバーターですが、インスタンスに依存しないため、マークアップ拡張の助けを借りて値コンバーターの通常のハッシュなしで使用できます。 XAMLではちょうど使用する
Visibility="{Binding [BoolProperty], Converter={[xmlns]:BoolToVisibilityConverter}}"
アイテムの可視性をbool値に設定できます。
public class BoolToVisibilityConverter : MarkupExtension, IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is bool)
return (bool)value ? Visibility.Visible : Visibility.Collapsed;
else
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is Visibility)
{
if ((Visibility)value == Visibility.Visible)
return true;
else
return false;
}
else
return false;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return this;
}
}
XAML定義のマークアップ拡張
XAMLには、あらかじめ定義されたマークアップ拡張が4つあります。
x:Type
は、指定された型のTypeオブジェクトを提供します。この機能は、スタイルやテンプレートで最も頻繁に使用されます。
<object property="{x:Type prefix:typeNameValue}" .../>
x:Static
は静的な値を生成します。値は、ターゲットプロパティの値の型ではなく、その型に評価できる値型のコードエンティティから取得されます。
<object property="{x:Static prefix:typeName.staticMemberName}" .../>
x:Null
はプロパティの値としてnullを指定し、属性またはプロパティ要素の値のいずれかに使用できます。
<object property="{x:Null}" .../>
x:Array
は、WPF基本要素とコントロールモデルによって提供されるコレクションサポートが故意に使用されない場合に、XAML構文で汎用配列を作成するためのサポートを提供します。
<x:Array Type="typeName">
arrayContents
</x:Array>