代码之家  ›  专栏  ›  技术社区  ›  devuxer

WPF样式中的绑定导致无法解释的“找不到管理框架元素”错误

  •  22
  • devuxer  · 技术社区  · 14 年前

    我有一个 ItemsControl 它显示了一组矩形。每个矩形都需要向上和向左偏移。所以,我创造了一个 RectangleStyle 它使用绑定来设置矩形的宽度、高度、X平移和Y平移。

    宽度和高度绑定工作正常,但我得到以下错误 TranslateTransform 绑定:

    System.Windows.Data错误:2:找不到目标元素的管理框架元素或框架内容元素。bindingExpression:path=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>
    

    这里是对 矩形风格 :

    <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 设定器 矩形风格 是错误的原因,但我不知道该怎么做才能解决问题。有趣的是,图形 被正确地翻译,所以WPF能够解析绑定——只是出于某种原因对它们不满意。

    如何修复绑定?


    编辑

    我提交了一份有关MS Connect的错误报告:

    https://connect.microsoft.com/VisualStudio/feedback/details/746840/misleading-cannot-find-governing-frameworkelement-error-message-appears-in-output-window

    3 回复  |  直到 9 年前
        1
  •  49
  •   user128300    13 年前

    我也无法解释发生错误消息的原因,但我发现向转换中添加x:name属性是消除错误消息的一种方法:

    <TranslateTransform x:Name="myTransform" X="{Binding Offset.X}" Y="{Binding Offset.Y}" /> 
    
        2
  •  9
  •   Rob Perkins    14 年前

    我想我找到了一些有用的信息。

    http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/db050ce6-d084-41ad-9a31-c01831687683

    对此的答案似乎在微软对itemscontrol经过其合成过程并应用绑定和样式时的行为的解释中。也就是说,WPF正在尝试在数据源未成功评估绑定之前优化您的数据模板:“dataitem=null”。在布局传递过程中的其他每个实例中,“dataitem”都指向“zones”IEnumerable中的某个内容,它能够完成绑定。否则,您将看到集合中每个项的错误,而不是每个属性一次。

    这似乎是一种“不注意窗帘后面的人”的类型。它可能会作为一个错误报告添加到MS Connect中;成功的代码不应该排除“错误”,这无关紧要。但如果你愿意的话,我会让你把这个文件交给MS Connect。

        3
  •  1
  •   AdamRossWalker    9 年前

    在阅读了RobPerkins的答案之后,我为这个问题的绑定添加了一个fallbackValue。这为我清除了错误。