3

ネストされた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; } }
}

子オブジェクト(長方形)に平行移動変換が適用され、次に親オブジェクト(グリッド)が全体を回転すると仮定します。しかし、これは私が見ているものではありません。ネストされた変換の実行順序は何ですか?どうすれば簡単に期待どおりに動作させることができますか?

4

1 に答える 1

2

これをさらに調査することで、バインディングが階層のトップダウンで解決されることを確認しました。つまり、親バインディングは子の前に解決されます。バインディングコードにブレークポイントを配置し、どちらが最初にヒットしたかを確認することで、これを確認しました。

ただし、私が気付いたのは、バインディングの解決とレンダリングの手順が別々であるということです。バインディングが間違った順序で発生するからといって、予期しない方法でレンダリングが発生するわけではありません。

私は自分の特定の問題を他の何かに関連するものとして追跡しました。それでも、この例がいくつかの有用な動作を示していることを願っています。

于 2012-07-25T20:39:32.357 に答える