1

問題ない

文字列値をとる依存関係プロパティを作成しました。私はそれをに設定し、TextBlockそれは動作します:

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

プロパティElementDataContext.ElementNameが「LvMain」に設定されていることを確認しました。

問題

ここに問題があります。のコンテキストメニューで、を介しTextBlockてこの依存関係プロパティにバインドしたいと思います。PlacementTarget

これが私がそれをやろうとする方法です。TextBlockこれは、とを含む私のXAMLの抜粋ですContextMenu

<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

何も機能しません。正しい構文は何ですか?これも可能ですか?

4

1 に答える 1

2

プロパティパスの構文は正しいですが、プロパティ式にその部分PlacementTarget.(dp:ElementDataContext.ElementName)を明示的に記述する必要もあります。Path=...

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

ただし、Binding MarkupExtensionのImplicitPathセクションでは、この動作については説明されていません。

于 2012-12-28T13:56:50.323 に答える