2012-01-04 8 views
8

キャンバスに2 "ドット"が描画されています。この(簡体字)のコードを参照してください:あなたが見ることができるようにWPFキャンバス上の要素のX座標Yへのバインド

<Canvas> 
    <Ellipse /> 
    <Ellipse /> 
    <Canvas.RenderTransform> 
     <RotateTransform x:Name="rotateEllipse" /> 
    </Canvas.RenderTransform> 
</Canvas> 

が、私は与えられたRotateTransformを使用してキャンバスを回転したいです。

次に、各楕円(ラベル)の近くにTextBlockを配置したいと思います。ただし、このTextBlockをCanvasに含めることは望ましくありません。私はテキストを水平にしておきたい。

どのようにこれをエレガントな方法で解決するか考えてみましょうか?

答えて

3

何か、べきCanvasの変換行列のあなた

<TextBlock RenderTransform="{Binding RelativeSource={RelativeSource AncestorType=Canvas}, 
                 Path=RenderTransform.Inverse}"/> 

割り当てテキストボックスtransformation matrixに逆ため作品。

+0

これは基本的に私がやったことです。 – mydogisbox

0

良い質問!そして、私は推測するつもりですので、塩のピンチでこの答えを取ってください。

回転したキャンバスに楕円の隣にテキスト注釈を配置しようとしていると思いますが、これらの注釈は水平のままにする必要があります。

  • を第一に、あなたはCanvas.GetTop/GetLeftから各楕円の知っているXYポイント与えられた、あなたは楕円の場所にRotateTransformを適用することにより、その新しい回転XYの場所を見つけることができ、使用して:あなたは試みることができる二つのこと式U = M×Vここで、Uは出力点、Vは入力点(楕円のXY位置)、Mは回転行列です。

  • 2番目のキャンバスを最初のキャンバスに配置することができます(両方がグリッドになっていると仮定して、2番目のキャンバスはZ-インデックスが高く、キャンバスと同じサイズです)。注釈レイヤーと呼んでください。注釈(テキストラベル)は、新しい変換された場所に表示され、この方法を使用して回転されません。

あなたはもちろんのコードでこれを行う必要があるだろう、ないXAML、あなたがソースRotateTransform /楕円にバインドされたTextBlockの上の値コンバータを作成することにより、結合フレンドリーなアプローチを見つけるかもしれないが、としましたあなたのためのこの操作。

もう1つの方法は、RotateTransformの.Inverseを取得してそれをテキストブロックに適用することですが、まだ新しい場所に移動するために翻訳する必要があります。いずれにせよ、私はそれがいくつかの実験を必要としていると思う。

敬具、このような

関連する問題