WPF 管理 FrameworkElement 未找到错误
Posted
技术标签:
【中文标题】WPF 管理 FrameworkElement 未找到错误【英文标题】:WPF governing FrameworkElement not found errors 【发布时间】:2014-02-03 03:42:20 【问题描述】:我有一堆以下类型的错误 System.Windows.Data 错误:2:找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement。
我能够解决除以下两个之外的大多数问题。
第一个错误是
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=WColor; DataItem=null; target element is 'SolidColorBrush' (HashCode=34289570); target property is 'Color' (type 'Color')
此错误的 XAML 代码如下
<ControlTemplate.Triggers>
<DataTrigger Binding="Binding Path=HasWColor" Value="True">
<Setter TargetName="HeaderIcon" Property="Fill">
<Setter.Value>
<SolidColorBrush Color="Binding Path=WColor, Converter=StaticResource ColorToBrushConverter"/>
</Setter.Value>
</Setter>
</DataTrigger>
</ControlTemplate>
通过使用转换器ColorToBrushConverter.
,我能够在我的应用程序的另一个文件中解决一个非常相似的错误,但相同的转换器在这里不起作用。下面是这个工作的代码。
<DataTemplate x:Key="GroupTemplate">
<StackPanel x:Name="Group" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Border BorderThickness="0,2,0,3" BorderBrush="DynamicResource TableBorderBrush">
<Border BorderThickness="7,0,0,0" >
<Border.BorderBrush>
<SolidColorBrush Color="Binding GroupColor, Converter=StaticResource ColorToBrushConverter"/>
</Border.BorderBrush>
</Border>
</Border>
</StackPanel>
<DataTemplate/>
第二个错误是
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=TranslateY; DataItem=null; target element is 'TranslateTransform' (HashCode=10383263); target property is 'Y' (type 'Double')
这个错误的代码是
<MultiDataTrigger.Setters>
<Setter Property="Visibility" Value="Visible"/>
<Setter Property="RenderTransform">
<Setter.Value>
<TranslateTransform x:Name="myTransform">
<TranslateTransform.X>
<MultiBinding Converter="StaticResource OffsetConverter">
<Binding Path="DisplayedX"/>
<Binding ElementName="LinesGrid" Path="ActualWidth"/>
<Binding Source="17"/>
</MultiBinding>
</TranslateTransform.X>
<TranslateTransform.Y>
<MultiBinding Converter="StaticResource OffsetConverter">
<Binding Path="TranslateY"/>
<Binding ElementName="PointsGrid" Path="ActualHeight"/>
<Binding Source="17"/>
<Binding Path="PointType"/>
</MultiBinding>
</TranslateTransform.Y>
</TranslateTransform>
</Setter.Value>
</Setter>
</MultiDataTrigger.Setters>
我已尝试按照此 post 中的建议为 TranslateTransform
提供 x:Name
属性,但无济于事。
关于如何摆脱这些错误的任何想法?
【问题讨论】:
HeaderIcon是什么类型的? 如果ColorToBrushConverter
执行其名称所述的操作- 转换颜色->画笔- 那么您不应该在此处使用此转换器,因为SolidColorBrush.Color
需要颜色,而不是画笔
@TrueEddie: HeaderIcon 是一个矩形。
@SOReader:使用转换器是我在堆栈溢出时发现的一个技巧。这是一篇使用类似解决方案的帖子***.com/questions/7926204/…
【参考方案1】:
对于第一个,如果你想使用转换器 hack,你应该直接将它分配给Fill
属性,而不是创建一个SolidColorBrush
:
<Setter TargetName="HeaderIcon" Property="Fill" Value="Binding Path=WColor, Converter=StaticResource ColorToBrushConverter"/>
对于第二个,如果没有更多调试信息,很难修复。尝试给转换器加断点,看看是在断点之前还是之后出现错误。
【讨论】:
您的建议是针对有效的代码。您似乎误读了哪些代码导致错误,哪些不是。错误是由Binding Path=WColor
引起的
我能够通过不使用solidcolorbrush
并直接使用Fill
属性来解决第一个错误。 <Setter TargetName="HeaderIcon" Property="Fill" Value="Binding Path=WColor, Converter=StaticResource ColorToBrushConverter"/>
@robertos:您能否编辑您的答案以反映这一点。然后我可以将其标记为正确答案。不过,我无法解决第二个错误。转换器处理 3 和 4 参数。我不确定这将如何导致此错误。以上是关于WPF 管理 FrameworkElement 未找到错误的主要内容,如果未能解决你的问题,请参考以下文章