
[英]WPF Error: “Cannot find governing FrameworkElement or Framework…”
[英]Binding in WPF style causes inexplicable "Cannot find governing FrameworkElement" error
我有一个显示一堆矩形的ItemsControl
。 每个矩形都需要向上和向左偏移。 因此,我创建了一个RectangleStyle
,它使用绑定来设置RectangleStyle
的宽度、高度、X 平移和 Y 平移。
宽度和高度绑定工作正常,但我收到TranslateTransform
绑定的以下错误:
System.Windows.Data 错误:2:找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement。 BindingExpression:Path=Offset.X; 数据项=空; 目标元素是“TranslateTransform”(HashCode=16452547); 目标属性是“X”(类型“双”)
这是我的ItemControl
的定义:
<ItemsControl
Style="{StaticResource ItemsControlStyle}"
ItemsSource="{Binding Zones}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Rectangle Style="{StaticResource RectangleStyle}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
这是ItemsControlStyle
的定义:
<Style x:Key="ItemsControlStyle" TargetType="ItemsControl">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style>
<Setter Property="Canvas.Left" Value="{Binding Point.X}" />
<Setter Property="Canvas.Top" Value="{Binding Point.Y}" />
</Style>
</Setter.Value>
</Setter>
</Style>
这是RectangleStyle
的定义:
<Style x:Key="RectangleStyle" TargetType="Rectangle">
<Setter Property="Width" Value="{Binding Size.Width}" />
<Setter Property="Height" Value="{Binding Size.Height}" />
<Setter Property="RenderTransform">
<Setter.Value>
<!-- these bindings are causing the error -->
<TranslateTransform X="{Binding Offset.X}" Y="{Binding Offset.Y}" />
</Setter.Value>
</Setter>
</Style>
RectangleStyle
的RenderTransform
setter 中的两个绑定是错误的原因,但我不确定如何解决该问题。 有趣的是,图形被正确地转换,所以WPF能够解析绑定-它只是不开心他们出于某种原因。
我能做些什么来修复绑定?
编辑
我在 MS Connect 上提交了一个错误报告:
我也无法解释为什么会出现错误消息,但我发现将 x:Name 属性添加到转换是一种摆脱错误消息的方法:
<TranslateTransform x:Name="myTransform" X="{Binding Offset.X}" Y="{Binding Offset.Y}" />
我想我找到了一些有用的信息。
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/db050ce6-d084-41ad-9a31-c01831687683
对此的答案似乎在 Microsoft 对 ItemsControl 完成其合成过程并应用绑定和样式时的行为的解释中。 也就是说,WPF 正在尝试优化您的 DataTemplate,然后才能成功评估绑定的数据源:“dataitem=null”。 在布局传递期间的所有其他实例中,“dataitem”指向“区域”IEnumerable 中的某些内容,并且它能够完成绑定。 否则,您会看到集合中每个项目的错误,而不是每个属性只出现一次。
这似乎是一种“不理会幕后男人”的事情。 它可能应该作为错误报告添加到 MS Connect 中; 成功的代码不应该踢出无关紧要的“错误”。 但是,如果您愿意,我会让您将其提交给 MS Connect。
阅读 Rob Perkins 的回答后,我将 FallbackValue 添加到与此问题的绑定中。 这为我清除了错误。
如果这有助于其他人查看此问题,即使绑定似乎在运行时工作,“输出”窗口中的此错误也困扰了我多年。 经过大量研究,我发现可视化树中不存在变换,因此无法解析绑定。
要解决此问题,请将 Transform 移动为 Rectangle 的子项,而不是在资源字典中。
<Rectangle Style="{StaticResource RectangleStyle}">
<Rectangle.RenderTransform>
<TranslateTransform X="{Binding Offset.X}" Y="{Binding Offset.Y}" />
</Rectangle.RenderTransform>
</Rectangle>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.