2012-01-04 9 views
8

पर तत्व के एक्स वाई निर्देशांक के लिए बाध्यकारी मेरे पास 2 "बिंदुओं" के साथ एक कैनवास है। इस (सरलीकृत) कोड देखें:WPF कैनवास

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

आप देख सकते हैं, मैं कैनवास दिया RotateTransform का उपयोग कर बारी बारी से करना चाहते हैं।

अगला, मैं प्रत्येक एलिप्स (एक लेबल) के पास एक टेक्स्टब्लॉक रखना चाहता हूं। हालांकि, मैं इस टेक्स्टब्लॉक को कैनवास में शामिल नहीं करना चाहता क्योंकि यह तब भी घुमाएगा। मैं पाठ क्षैतिज रहने के लिए चाहता हूँ।

कोई विचार यह है कि इसे एक सुरुचिपूर्ण तरीके से कैसे हल किया जाए?

उत्तर

3

कुछ इस तरह, चाहिए के लिए आप

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

असाइन पाठ बॉक्स transformation matrix के लिए एक Canvas के परिवर्तन मैट्रिक्स का प्रतिलोम काम करते हैं।

+0

यह मूल रूप से मैंने भी किया है। – mydogisbox

0

अच्छा सवाल! और मैं अनुमान लगाने जा रहा हूं, इसलिए कृपया इस जवाब को नमक के चुटकी से लें।

मेरा मानना ​​है कि आप घुमावदार कैनवास पर लंबवत के आगे टेक्स्ट एनोटेशन रखने की कोशिश कर रहे हैं, लेकिन इन टिप्पणियों को क्षैतिज रहने की आवश्यकता है। दो बातें आप की कोशिश कर सकते:

  • सबसे पहले, XY मुद्दा यह है कि आप Canvas.GetTop/GetLeft से प्रत्येक अंडाकार के बारे में पता दिया है, तो आप अपने नए घुमाया XY स्थान अंडाकार स्थान पर RotateTransform लगाने से, का उपयोग करते हुए मिल सकता है फॉर्मूला यू = एम * वी, जहां यू आउटपुट प्वाइंट है, वी इनपुट पॉइंट (एलिप्स का एक्सवाई स्थान) है और एम रोटेशन मैट्रिक्स है।

  • दूसरा, आप पहले पर एक दूसरा कैनवास लगा सकते हैं (मानते हैं कि वे दोनों ग्रिड में हैं, दूसरा कैनवास उच्च जेड-इंडेक्स पर है और अंतर्निहित कैनवास के समान आकार है)। इसे एक एनोटेशन परत कहते हैं। आपके एनोटेशन (टेक्स्ट लेबल्स) नए रूपांतरित स्थानों पर दिखाई दे सकते हैं और इस दृष्टिकोण का उपयोग करके नहीं छोड़े जा सकते हैं।

आप निश्चित रूप से कोड में यह करने के लिए होगा, नहीं Xaml, यद्यपि आप TextBlock पर एक मूल्य कनवर्टर कि स्रोत RotateTransform/दीर्घवृत्त के लिए बाध्य बनाने के द्वारा एक बाध्यकारी अनुकूल दृष्टिकोण मिल सकती है और किया आपके लिए यह ऑपरेशन

एक और दृष्टिकोण घुमाने के लिए होगा। घुमावदार ट्रांसफॉर्म के विपरीत और टेक्स्टब्लॉक पर लागू करें, हालांकि आपको अभी भी नए स्थान पर जाने के लिए अनुवाद करने की आवश्यकता हो सकती है। किसी भी तरह से मुझे लगता है कि यह कुछ प्रयोग की मांग करता है।

सादर,