从WPF自定义MarkupExtension访问“当前类”

时间:2010-06-15 17:21:13

标签: c# wpf user-controls markup-extensions

我正在尝试编写一个自定义MarkupExtension,通过为我提供更好的方法来指定XAML中的绑定,让我的生活更轻松。但是,我想知道是否有任何方法可以访问代表MarkupExtension所用文件的对象。

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

这一切都可能吗?

1 个答案:

答案 0 :(得分: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
}