如何为CustomBinding MarkupExtension制作Resharperparsingpath

我想创build一些扩展绑定标记扩展,其行为就像一个正常的WPF绑定,但做更多的事情(使用不同的默认值,可能会添加一些行为等)。 代码如下所示:

public class CustomBindingExtension : Binding { .. some extra properties and maybe overrides ... } 

这一切工作正常,包括XAML-intellisense,除了我不能使Resharper正确解决我的绑定path。 即:使用这个代码我可以[Strg] +点击'CurrentText'和Resharper让VS2010导航到定义CurrentText属性的代码。

 <UserControl x:Name="uc" ...> <TextBox Text="{Binding ViewModel.CurrentText, ElementName=uc}" /> </UserControl> 

但使用我的绑定,在运行时正常工作,我只是得到一个工具提示hover'CurrentText'告诉我这是一些'MS.Internal.Design.Metadata.ReflectionTypeNode',并没有通过[Strg] +点击导航。

 <UserControl x:Name="uc" ...> <TextBox Text="{util:CustomBinding ViewModel.CurrentText, ElementName=uc}" /> </UserControl> 

我尝试了以下的东西:

  • 从绑定派生
  • 从BindingDecoratorBase派生
  • 省略我的CustomBinding类的“扩展”后缀
  • 把Markup-Extension放在一个单独的程序集中
  • 使用ConstructorArgumentAttribute
  • path属性的stringtypes和typesPropertyPath的属性
  • 我也看了原来的类Binding和BindingBase,但是找不到我的代码有更多的区别。 任何想法应该在这里帮助吗? 或者,这只是对Binding-MarkupExtension的一种特殊处理,我无法获得自己的MarkupExtensions?

    更新16.03.2011:也可能是缺陷或Resharper缺陷,Jetbrains正在调查的问题:http://youtrack.jetbrains.net/issue/RSRP-230607

    更新10.12.2013:同时,该function似乎工作(与R#7.1.3,也许也是早期版本),我实际上使用BindingDecoratorBase的方法,我非常喜欢它。 如果你的MarkupExtension以'Binding'结尾,但是我的确如此,所以我很高兴。

    实际上在当前版本的R#中是不可能的,不幸的是,仍然会缺less即将到来的R#6.1版本的特性。

    这个function需要大量的基础设施改变,但是它在我们的列表中,并且肯定会在R#7中实现。看起来像[CustomBindingMarkup][BindingPath] (用于path构造参数和Path属性)属性将被引入。

    我们真的很抱歉给您带来不便。

    您应该使用正确的名称空间访问您的自定义标记扩展:

     <UserControl x:Name="uc" ... xmlns:ext="clr-ns:YourProjectNamespace"> <TextBox Text="{ext:CustomBinding ViewModel.CurrentText, ElementName=uc}" /> </UserControl> 

    这里是一个关于创build自定义标记扩展的好文章。

    欺骗R#的一种方法是命名它绑定:

     public class Binding : MarkupExtension { public Binding() { } public Binding(string path) { Path = path; } public string Path { get; set; } public override object ProvideValue(IServiceProvider serviceProvider) { return 5; } } 

    然后它与标准的R#

     <TextBlock Text="{custom:Binding SomeProp}" /> 
    Interesting Posts