The error is a TypeNameParserException with the following additional information: Prefix 'dp' does not map to a namespace.
TypeNameParserException |
I got this when binding to one of my dependency properties with namespace, like this:
<ContextMenu x:Key="contextMenu" Tag="{Binding PlacementTarget.(dp:MyClass.MyDependencyProperty), RelativeSource={RelativeSource Self}, Mode=OneWay}">
As you can see the element is a context menu (which is defined in a Resources section, don't know if this matters). And I am binding to the dependency property dp:MyClass.MyDependencyProperty of the context menu's PlacementTarget (PlacementTarget is the element the context menu is invoked for).
This binding caused the problem because as soon as I opened the context menu I got the TypeNameParserException. When I removed this binding the error went away.
So this lead to the error:
Binding PlacementTarget.(dp:MyClass.MyDependencyProperty)
(Note: there were no compiler warnings, no squiggly lines, everything seemed valid.)
After some fiddling and googling I found the solution.
This solved the error:
Binding Path=PlacementTarget.(dp:MyClass.MyDependencyProperty)
It's simple: you explicitly have to specify the Path part! See the difference? Let's highlight it a bit more:
Binding Path=PlacementTarget.(dp:MyClass.MyDependencyProperty)
Maybe this helps you when you get strange namespace-related errors.
You are awesome, I re-templated some controls and forgot about this issue. Took me a while to get to the source of the problem. And I was glad to see that you documented the fix :) Nice one!
ReplyDeleteThanks!
ReplyDelete