嵌套Silverlight转换的执行顺序是什么?

3

我正在使用嵌套的Silverlight控件中的复合变换,但出现了意外结果。

这是一个简化的XAML示例:

<Grid x:Name="ContainerControl" RenderTransformOrigin="0,0">
  <Grid.RenderTransform>
    <CompositeTransform Rotation="{Binding Rotation}"/>
  </Grid.RenderTransform>
  <Rectangle Width="50" Height="50" Fill="RoyalBlue" DataContext="{Binding Child}">
    <Rectangle.RenderTransform>
      <CompositeTransform TranslateX="{Binding XTranslation}" TranslateY="{Binding YTranslation}"/>
    </Rectangle.RenderTransform>
  </Rectangle>
</Grid>

使用非常简单的对象:
public class TestData
{
    public decimal Rotation { get { return 90; } }

    public TestChild Child { get { return new TestChild(); } }
}

public class TestChild
{
    public decimal XTranslation { get { return 20; } }
    public decimal YTranslation { get { return 30; } }
}

我会假设子对象(矩形)将应用其平移变换,然后父对象(网格)将旋转整个物体。但是,我没有看到这种情况。嵌套变换的执行顺序是什么?如何轻松地强制它按照我的期望工作?
1个回答

2
在进一步研究后,我确认绑定在层次结构中自上而下进行解析。也就是说,父级绑定会在子级之前被解析。通过在绑定代码中设置断点并观察哪个先被命中,我看到了这一点。
然而,我意识到绑定解析和呈现步骤是分开的。仅因为绑定发生顺序错误,并不意味着呈现方式会出乎意料。
我已经追踪到我的特定问题与其他事情有关。尽管如此,我希望这个例子展示了一些有用的行为。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接