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

嵌套silverlight转换的执行顺序是什么?,silverlight,xaml,transformation,silverlight-5.0,Silverlight,Xaml,Transformation,Silverlight 5.0,我正在嵌套silverlight控件中使用CompositeTransforms,并看到意外的结果 以下是XAML的简化示例: <Grid x:Name="ContainerControl" RenderTransformOrigin="0,0"> <Grid.RenderTransform> <CompositeTransform Rotation="{Binding Rotation}"/> </Grid.RenderTransfor

我正在嵌套silverlight控件中使用CompositeTransforms,并看到意外的结果

以下是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; } }
}