通过PlacementTarget绑定到依赖项属性失败 - 错误的路径语法?

时间:2012-12-28 12:22:25

标签: wpf data-binding dependency-properties

没问题

我创建了一个带有字符串值的依赖项属性。我将它设置为TextBlock并且可以正常工作:

<TextBlock dp:ElementDataContext.ElementName="LvMain">

我确认属性ElementDataContext.ElementName设置为“LvMain”。

问题

现在问题是:在TextBlock的上下文菜单中,我想通过PlacementTarget 绑定到此依赖项属性

以下是我尝试这样做的方法。这是我的XAML的摘录,其中包含TextBlockContextMenu

<TextBlock dp:ElementDataContext.ElementName="LvMain">
    <TextBlock.ContextMenu>
        <ContextMenu Tag="{Binding PlacementTarget.(dp:ElementDataContext.ElementName), RelativeSource={RelativeSource Self}}">

这在运行时失败。打开上下文菜单时,它会给我一个“BindingExpression路径错误”:

BindingExpression path error: '(dp:ElementDataContext.ElementName)' property not found on 'object' ''TextBlock' (Name='')'. BindingExpression:Path=PlacementTarget.(dp:ElementDataContext.ElementName); DataItem='ContextMenu' (Name='contextMenu'); target element is 'ContextMenu' (Name='contextMenu'); target property is 'Tag' (type 'Object')

我怀疑我的绑定路径是错误的。我试过了

  • PlacementTarget.(dp:ElementDataContext.ElementName)
  • PlacementTarget.dp:ElementDataContext.ElementName
  • PlacementTarget.ElementDataContext.ElementName

没有任何作用。什么是正确的语法?这甚至可能吗?

1 个答案:

答案 0 :(得分:2)

属性路径语法PlacementTarget.(dp:ElementDataContext.ElementName)是正确的,但您还必须在属性表达式中显式写入Path=...部分:

<ContextMenu Tag="{Binding Path=PlacementTarget.(dp:ElementDataContext.ElementName),
                           RelativeSource={RelativeSource Self}}">

但是,Binding Markup Extension中的隐式路径部分未提及此行为。