【问题标题】:WPF governing FrameworkElement not found errorsWPF 管理 FrameworkElement 未找到错误
【发布时间】: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:使用转换器是我在堆栈溢出时发现的一个技巧。这是一篇使用类似解决方案的帖子stackoverflow.com/questions/7926204/…

标签: c# wpf binding


【解决方案1】:

对于第一个,如果你想使用转换器 hack,你应该直接将它分配给Fill 属性,而不是创建一个SolidColorBrush

<Setter TargetName="HeaderIcon" Property="Fill" Value="{Binding Path=WColor, Converter={StaticResource ColorToBrushConverter}}"/>

对于第二个,如果没有更多调试信息,很难修复。尝试给转换器加断点,看看是在断点之前还是之后出现错误。

【讨论】:

  • 您的建议是针对有效的代码。您似乎误读了哪些代码导致错误,哪些不是。错误是由Binding Path=WColor引起的
  • 我能够通过不使用solidcolorbrush 并直接使用Fill 属性来解决第一个错误。 &lt;Setter TargetName="HeaderIcon" Property="Fill" Value="{Binding Path=WColor, Converter={StaticResource ColorToBrushConverter}}"/&gt; @robertos:您能否编辑您的答案以反映这一点。然后我可以将其标记为正确答案。不过,我无法解决第二个错误。转换器处理 3 和 4 参数。我不确定这将如何导致此错误。
猜你喜欢
  • 2013-03-24
  • 2021-08-22
  • 2020-02-10
  • 2013-08-17
  • 2011-03-12
  • 2018-08-18
  • 1970-01-01
  • 2021-01-23
相关资源
最近更新 更多