我有一个模拟绑定的自定义 MarkupExtension。它在正常分配中效果很好,但在样式设置器中使用时效果不佳,例如:
<Setter Property="Content" Value="{local:MyExtension}" />
结果出现 XamlParseException:
A 'Binding' cannot be set on the 'Value' property of type 'Setter'.
A 'Binding' can only be set on a DependencyProperty of a DependencyObject.
这是扩展的实现:
public class MyExtension : MarkupExtension
{
public MyExtension()
{
Value = 123;
}
public object Value
{
get;
set;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
var binding = new Binding("Value")
{
Source = this,
};
return binding.ProvideValue(serviceProvider);
}
}
有什么问题?!
有点猜测,但这可能是因为 XAML 编译器对Binding
类,允许在这个场景(和其他场景)中使用它。这Binding
类也是一个MarkupExtension
,但不幸的是它密封了其实施ProvideValue()
.
也就是说,你可能会侥幸逃脱:
public class MyBinding : Binding
{
private object value;
public object Value
{
get { return this.value; }
set
{
this.value = value;
this.Source = value;
}
}
}
Since ProvideValue
将返回Binding
无论如何。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)