Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问;“当前类别”;来自WPF自定义标记扩展_C#_Wpf_User Controls_Markup Extensions - Fatal编程技术网

C# 访问;“当前类别”;来自WPF自定义标记扩展

C# 访问;“当前类别”;来自WPF自定义标记扩展,c#,wpf,user-controls,markup-extensions,C#,Wpf,User Controls,Markup Extensions,我正试图编写一个定制的MarkupExtension,通过提供更好的方式在XAML中指定绑定,使我的生活更轻松。但是,我想知道是否有任何方法可以访问表示使用MarkupExtension的文件的对象 换句话说,假设我有一个UserControl,它定义了程序数据模型的特定格式副本。这个控件有很多可视化的东西,比如网格、边框和总体布局。如果我对这个UserControl中某个元素的特定属性使用MarkupExtension,我想访问UserControl的实例,而不知道它是什么类型(我计划使用反射

我正试图编写一个定制的
MarkupExtension
,通过提供更好的方式在XAML中指定绑定,使我的生活更轻松。但是,我想知道是否有任何方法可以访问表示使用
MarkupExtension
的文件的对象

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


这可能吗?

在.NET4.0中,他们添加了该功能,但不幸的是,在以前的版本中不可能。如果您使用的是.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
}

我正在使用.NET4!让我试试看。:)我们别无选择,困在3.5里((((((((((在.NET 3.5中,您只能访问IXamlTypeResolver和IProvideValueTarget。不幸的是,它们无法获取您正在处理的xaml文件根目录下的对象。IProvideValueTarget将允许您获取扩展名所调用的对象。我想您可以沿着其可视化树找到根对象,如果您假定root是一个用户控件或窗口。这显然不如.NET4解决方案那么健壮,但它可能在您的场景中工作。