デフォルトではシリアライズされていないため、シリアライズがバインディングで機能するためには、TypeConverter で BindingExpression のバインディング コンバーターを登録する必要があることがわかりました。
このクラスを ExpressionConverter として追加する必要があります
public class BindingConverter : ExpressionConverter
{
public override bool CanConvertTo(System.ComponentModel.ITypeDescriptorContext context, Type destinationType)
{
return true;
}
public override object ConvertTo(System.ComponentModel.ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
{
if (destinationType == typeof(MarkupExtension))
{
BindingExpression bindingExpression = value as BindingExpression;
if (bindingExpression == null)
{
throw new FormatException("Expected binding, but didn't get one");
}
return bindingExpression.ParentBinding;
}
return base.ConvertTo(context, culture, value, destinationType);
}
}
次に、このメソッドを使用して、XamlWriter.Save パーツを実行する場所を登録します。
private void Register()
{
Attribute[] attr = new Attribute[1];
TypeConverterAttribute vConv = new TypeConverterAttribute(typeof(BindingConverter));
attr[0] = vConv;
TypeDescriptor.AddAttributes(typeof(BindingExpression), attr);
}
ここから取得:
コード ビハインドでのテンプレート バインディングの設定