从WPF自定义MarkupExtension访问"当前类"

dev*_*os1 7 c# wpf user-controls markup-extensions

我试图MarkupExtension通过给我一个更好的方法在XAML中指定绑定来编写自定义以使我的生活更轻松.但是,我想知道是否有任何方法可以访问表示所用文件的对象MarkupExtension.

换句话说,假设我有一个UserControl定义我的程序的数据模型的特定再现.这个控件有很多视觉材料,如网格,边框和总体布局.如果我MarkupExtension在一个元素的特定属性上使用my UserControl,我想访问它的实例UserControl,而不知道它是什么类型(我计划使用反射).

这是可能吗?

Abe*_*cht 13

在.NET 4.0中,他们添加了IRootObjectProvider功能,但不幸的是,它在以前的版本中是不可能的.如果您使用的是.NET 4.0,则可以执行以下操作:

public override object ProvideValue(IServiceProvider serviceProvider)
{
    var rootObjectProvider = serviceProvider.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;
    var root = rootObjectProvider.RootObject;
    // do whatever you need to do here
}
Run Code Online (Sandbox Code Playgroud)

  • 在.NET 3.5中,您只能访问IXamlTypeResolver和IProvideValueTarget.不幸的是,他们不会在您正在使用的xaml文件的根目录下获取对象.IProvideValueTarget将允许您获取调用扩展的对象.如果你假设root是UserControl或Window,我想你可以沿着它的可视树走到根对象.这显然不如.NET 4解决方案强大,但它可能适用于您的场景. (2认同)