2012-07-25 31 views
3

我在嵌套Silverlight控件中使用CompositeTransforms並看到意外的結果。嵌套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; } } 
} 

我假設子對象(矩形)將具有其平移變換施加和那麼父對象(網格)就會旋轉整個事物。但是,這不是我所看到的。什麼是嵌套轉換的執行順序?我怎樣才能輕鬆地強制它按我期望的方式工作?

回答

2

在進一步研究中,我已確認綁定在層次結構中自上而下得到解決。也就是說,父級綁定在子級之前得到解決。我通過在綁定代碼中放置斷點並查看哪個首先被觸擊來看到這一點。

但是,我意識到綁定解析和渲染步驟是分開的。僅僅因爲綁定以錯誤的順序發生並不意味着渲染以意想不到的方式發生。

我追查到與其他事情有關的具體問題。不過,我希望這個例子演示一些有用的行爲。

相關問題