2012-01-04 18 views
8

Üzerinde 2 "noktalı" bir Tuvalim var. Bu (basitleştirilmiş) kodu Bkz: Gördüğünüz gibiWPF Canvas öğesinin X Y koordinatlarına bağlanma

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

, bana verilen RotateTransform'un kullanarak tuval döndürmek istiyorum.

Sonraki, her Elips'e (bir etiket) yakın bir TextBlock yerleştirmek istiyorum. Bununla birlikte, bu TextBlock'u Tuval'e dahil etmek istemiyorum, çünkü daha sonra da dönecektir. Metnin yatay kalmasını istiyorum.

Bunu nasıl zarif bir şekilde çözebileceğinizi biliyor musunuz?

cevap

3

şey, gerektiği Canvas dönüşümü matrisinin sen

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

Ata bir metin kutusuna transformation matrix için ters için eser.

+0

Temel olarak bu benim de yaptığım şey. – mydogisbox

0

İyi soru! Ve tahmin edeceğim, lütfen bu cevabı bir tutam tuz ile alın.

Döndürülmüş bir tuval üzerinde elipslerin yanında metin ek açıklamaları yerleştirmeye çalıştığınıza inanıyorum, ancak bu ek açıklamaların yatay kalması gerekir. deneyebilirsin İki şey: Eğer Canvas.GetTop/Getleft her elips biliyor XY noktası verilen, kullanmakta, elips konuma RotateTransform'un uygulayarak yeni döndürülmüş XY konumunu bulabiliriz

Öncelikle
  • , U = M * V formülü, burada U çıkış noktasıdır, V giriş noktasıdır (elipsin XY konumu) ve M, Rotasyon Matrisi'dir. İkincisi, birincisine ikinci bir tuval yerleştirebilirsiniz (her ikisi de bir ızgarada oldukları varsayılırsa, ikinci tuval daha yüksek Z-indeksindedir ve alttaki tuval ile aynı boyuttadır). Bir açıklama katmanı olarak adlandırın. Ek açıklamalarınız (metin etiketleri) yeni dönüştürülmüş konumlarda görünebilir ve bu yaklaşım kullanılarak işlenmemiş olabilir.

Elbette kodda bunu yapmak zorunda kalacaktı değil Xaml, sen kaynağı RotateTransform'un/Elips bağlı TextBlock üzerinde bir değer dönüştürücü oluşturarak bağlayıcı dostu bir yaklaşım bulabilirsiniz rağmen ve yaptım bu işlem sizin için.

Başka bir yaklaşım, RotateTransform öğesinin tersini almak ve bunu textblock'lara uygulamaktır, ancak yine de yeni konuma ulaşmak için çevirmeniz gerekebilir. Her iki durumda da bazı deneyler gerektirdiğini düşünüyorum.

Saygılarımızla, böyle

İlgili konular