我有一个显示一堆矩形的ItemsControl
。每个矩形需要向上和向左偏移。所以,我创建了一个RectangleStyle
,它使用绑定来设置矩形的宽度,高度,X平移和Y平移。
宽度和高度绑定工作正常,但我收到TranslateTransform
绑定的以下错误:
System.Windows.Data错误:2:找不到目标元素的管理FrameworkElement或FrameworkContentElement。 BindingExpression:路径= Offset.X;的DataItem = NULL; target元素是'TranslateTransform'(HashCode = 16452547); target属性为'X'(类型'Double')
以下是我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>
RenderTransform
RectangleStyle
setter中的两个绑定是导致错误的原因,但我不知道如何解决问题。有趣的是,图形正在正确翻译,因此WPF能够解析绑定 - 由于某种原因,它只是对它们不满意。
我该怎么做才能修复绑定?
修改
我提交了有关MS Connect的错误报告:
答案 0 :(得分:49)
我也无法解释为什么会出现错误消息,但我发现在转换中添加x:Name属性是一种摆脱错误消息的方法:
<TranslateTransform x:Name="myTransform" X="{Binding Offset.X}" Y="{Binding Offset.Y}" />
答案 1 :(得分:9)
我想我发现了一些有用的信息。
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/db050ce6-d084-41ad-9a31-c01831687683
这个问题的答案似乎是微软对行为的解释,因为ItemsControl经历了它的合成过程并应用了绑定和样式。也就是说,WPF正在尝试优化DataTemplate,然后才能拥有成功评估绑定的数据源:“dataitem = null”。在其布局过程中的每个其他实例中,“dataitem”指向“Zones”IEnumerable中的某些内容,并且它能够完成绑定。否则,您会看到集合中每个项目的错误,而不是每个属性只有一次。
它似乎是一个“不关注窗帘背后的男人”类型的东西。它应该作为错误报告添加到MS Connect中;成功的代码不应该踢出“无关紧要的错误”。但是如果你愿意,我会留给你用MS Connect提交。答案 2 :(得分:1)
在阅读Rob Perkins的回答后,我在这个问题的绑定中添加了一个FallbackValue。这清除了我的错误。
答案 3 :(得分:0)
如果这可以帮助其他任何人查看此问题,即使绑定似乎在运行时也起作用,则“输出”窗口中的此错误会困扰我很久。经过大量研究,我发现视觉树中不存在转换,因此无法解析绑定。
要解决此问题,请将Transform移为Rectangle的子级,而不要移至资源字典中。
<Rectangle Style="{StaticResource RectangleStyle}">
<Rectangle.RenderTransform>
<TranslateTransform X="{Binding Offset.X}" Y="{Binding Offset.Y}" />
</Rectangle.RenderTransform>
</Rectangle>