में प्रस्तुत करना मैं प्राइमेटिव्स में नियंत्रण को विभाजित करने के लिए सामान्य WPF प्रतिपादन को हाइजैक करना चाहता हूं, लेआउट प्रबंधन करें, बाइंडिंग इत्यादि लागू करें।कस्टम ड्रॉइंग कॉन्टेक्स्ट
जहां तक मैं समझता हूं, डब्ल्यूपीएफ में संपूर्ण प्रतिपादन निर्भरता संपत्ति प्रणाली द्वारा परिभाषित मूल्यों के साथ लेआउट प्रबंधक द्वारा गणना की गई जगहों पर प्राइमेटिव (टेक्स्ट, छवि, रेखा, वक्र) को प्रस्तुत करने के लिए उबाल जाता है। अगर मैं अपना खुद का आदिम-प्रतिपादन तर्क प्रदान कर सकता हूं, तो मैं उदाहरण प्रस्तुत करने में सक्षम होगा एक कस्टम दस्तावेज़ प्रकार के लिए, नेटवर्क आदि
मेरे योजना पर वास्तविक प्रतिपादन के लिए पुरातन हस्तांतरण पीछा कर रहा है:
- एक कस्टम
DrawingContext
को लागू करें।DrawingContext
एक अमूर्त वर्ग है, जोDrawEllipse
,DrawText
,DrawImage
आदि जैसी विधियों का एक समूह परिभाषित करता है - मुझे इस कार्यक्षमता के लिए अपना स्वयं का कार्यान्वयन करने की आवश्यकता होगी। - एक WPF
UserControl
बनाएं और उसे दिए गएDrawingContext
पर प्रस्तुत करने के लिए मजबूर करें।
हालांकि मैं निम्न समस्याओं का सामना किया है:
DrawingContext
सार आंतरिक तरीकोंvoid PushGuidelineY1(double coordinate)
औरvoid PushGuidelineY2(double leadingCoordinate, double offsetToDrivenCoordinate)
है, जो मैं आसानी से ओवरराइड नहीं कर सकते हैं। (शायद इस पर काबू पाने के लिए कुछ चाल है?)- पूरे
DrawingContext
पर दृश्य प्रस्तुत करने की कोई विधि नहीं है? क्यूं कर?
मैं की तरह
void RenderRecursively(UIElement e, DrawingContext ctx)
{
e.OnRender(ctx);
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(e); i++)
RenderRecursively((UIElement)VisualTreeHelper.GetChild(e, i), ctx);
}
कुछ कर सकते हैं - लेकिन मुझे आश्चर्य है कि एक UIElement
रेंडर करने के लिए एक सीधा रास्ता है तो। (बेशक, यह समस्या एक मामूली है, लेकिन इसके लिए कोई आधारभूत संरचना नहीं देखकर मुझे आश्चर्य होता है कि यह सही तरीका है।)
तो, क्या DrawingContext
विरासत के लिए लक्षित नहीं है? क्या कस्टम DrawingContext
सही दिशा में एक कदम की आपूर्ति करने का पूरा विचार है, या मुझे रणनीति पर पुनर्विचार करने की आवश्यकता है? WPF में समर्थित कस्टम संदर्भ पर चित्रण कर रहा है, या मुझे एक अलग अवरोध बिंदु की आवश्यकता है?
ड्रॉइंग कॉन्टेक्स्ट पर टिप्पणियों से: 'आप कभी भी DrawingContext को तुरंत चालू नहीं करते हैं; हालांकि, आप कुछ तरीकों से ड्राइंग संदर्भ प्राप्त कर सकते हैं, जैसे DrawingGroup.Open और DrawingVisual.RenderOpen.' मेरे लिए इसका मतलब यह है कि वास्तव में * कस्टम * ड्रॉइंग कॉन्टेक्स्ट को आपूर्ति * करने का कोई तरीका नहीं है। – Clemens
@ क्लेमेन: हाँ, मैंने यह टिप्पणी देखी, लेकिन मुझे यह समझ गया कि "आपको इसे स्वयं नहीं बनाना चाहिए, हम इसे आपके लिए आंतरिक रूप से करते हैं; और ड्राइंग विज़ुअल में ड्राइंग के लिए बस ड्रॉइंगविज़ुअल को इसे ठीक से प्रारंभ करने दें"। वैसे भी, दिलचस्प है अगर ड्राइंग के लिए वैध अवरोध बिंदु हैं। – Vlad
DrawingVisual में आकर्षित करने का एकमात्र तरीका DrawingVisual.RenderOpen द्वारा प्रदान किए गए DrawingContext में आकर्षित करना है। विज़ुअल के साथ अपने कस्टम ड्रॉइंग कॉन्टेक्स्ट को जोड़ने का कोई तरीका नहीं है। विचार व्यर्थ है। – Clemens