Cannot find source for binding with reference原因分析与解决方法 -[WPF开发]
最近在作一个项目展示的WPF应用,增加了一个3D的展示效果后Debug发现都出现Cannot find source for binding with reference这个错误,首先先看xaml文件里的定义。
1<ec:PathListBox.LayoutPaths>
<ec:LayoutPath SourceElement="{Binding ElementName=menu_path1}" Orientation="OrientToPath" Distribution="Even" Start="0.5"/>
</ec:PathListBox.LayoutPaths>
2
3 <!--另外一部分,同在一个xaml文件里面-->
4 <Path x:Name="menu_path1" Data="M39.97894,246.6824 C39.97894,246.6824 97.116112,-43.891956 353.81946,62.111926"
Height="207.838" Margin="39.979,38.844,0,0" Stretch="Fill" VerticalAlignment="Top" Width="313" HorizontalAlignment="Left"/>
<ec:LayoutPath SourceElement="{Binding ElementName=menu_path1}" Orientation="OrientToPath" Distribution="Even" Start="0.5"/>
</ec:PathListBox.LayoutPaths>
2
3 <!--另外一部分,同在一个xaml文件里面-->
4 <Path x:Name="menu_path1" Data="M39.97894,246.6824 C39.97894,246.6824 97.116112,-43.891956 353.81946,62.111926"
Height="207.838" Margin="39.979,38.844,0,0" Stretch="Fill" VerticalAlignment="Top" Width="313" HorizontalAlignment="Left"/>
编译过后报错信息如下:
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=menu_path1'. BindingExpression:(no path); DataItem=null; target element is 'LayoutPath' (HashCode=16248163); target property is 'SourceElement' (type 'FrameworkElement')
想了很久找不出这个Binding出了什么问题,上MSDN上查资料,发现这是namescope(查看解释)的问题。也就是说,xaml文件中定义的element都在同一个namescope里面,但是那个 PathListBox却是在ec这个namescope里面,那个LayoutPath里面希望通过binding一个ElementName去获取Path的内容作为LayoutPath的SourceElement。由于那Path元素没有添加到ec这个namescope里的expanded template tree里面,所以就找不到元素menu_path1。
解决的方式有多种,例如可以通过RelativeSource去进行binding而不是ElementName,或者在后台进行binding设置也是可以的。可参考解决讨论:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/feef9913-9371-4377-a621-c14aa998cc6e/
@:卿之 → http://www.cnblogs.com/wpdev
©:博文是本人当时的学习笔记及知识整理,由于自身局限错误在所难免,敬请斧正.
©:本文版权属于博客园和本人,版权基于署名 2.5 中国大陆许可协议发布,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接和署名卿之(包含链接),不得删节,否则保留追究法律责任的权利。