Нет проблем

Я создал свойство зависимости, которое принимает строковое значение. Я установил его на TextBlock, и он работает:

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

Я проверил, что для свойства ElementDataContext.ElementName установлено значение «LvMain».

Проблема

Вот проблема: в контекстном меню TextBlock я хочу привязать к этому свойству зависимости через PlacementTarget .

Вот как я пытаюсь это сделать. Это отрывок из моего XAML, содержащего TextBlock и 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

Ничего не работает. Какой правильный синтаксис? Это вообще возможно?

1
Heinrich Ulbricht 28 Дек 2012 в 16:22
Посмотрите на это: wpftutorial.net/DebugDataBinding.html может помочь вам найти дополнительную информацию о ошибка
 – 
Agustin Meriles
28 Дек 2012 в 16:33

1 ответ

Лучший ответ

Синтаксис пути к свойству PlacementTarget.(dp:ElementDataContext.ElementName) правильный, но вы также должны явно указать часть Path=... в выражении свойства:

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

Однако раздел Неявный путь в Binding Markup Extension не упоминает об этом поведении.

2
Clemens 28 Дек 2012 в 18:21
Нарф. Вот и все, спасибо вам большое! Так просто, а сообщение об ошибке так бесполезно.
 – 
Heinrich Ulbricht
29 Дек 2012 в 02:46