2009-07-02 16 views
11

मैं डब्ल्यूपीएफ में कैनवास बनाम ग्रिड पैनलों का उपयोग करने पर राय ढूंढ रहा हूं। मुझे क्लासिक इनपुट फॉर्म बनाने की ज़रूरत है जिसमें मूल रूप से ग्रिड लेआउट हों, कुछ में छोटे डेटाग्राइड हो सकते हैं, ग्रुपबॉक्स, लेकिन सभी ग्रिड लेआउट में गठबंधन हो सकते हैं। मैं अपने सभी रूपों के लिए ग्रिड या कैनवास पैनल का उपयोग करना चाहता हूं या नहीं। ग्रिड मुझे अच्छी संरचना दे रहा है; मैं नियंत्रणों के संरेखण को अधिक आसानी से रख सकता हूं। मेरे पास सभी खिड़कियों के लिए बेस क्लास (जो विंडो क्लास विरासत में है) होगा, इसलिए विजुअल स्टूडियो में डिज़ाइनर बेकार होगा, क्योंकि इसमें इस तरह के विरासत के लिए समस्याएं हैं, और ग्रिड पैनल के साथ मुझे वास्तव में डिजाइनर की भी आवश्यकता नहीं है, और मैं कर सकता हूं खिड़की SizeToContent सेट करें ताकि सब ठीक ठीक हो जाए। लेकिन फिर से कैनवास के साथ, मेरे पास नियंत्रणों को किसी भी तरह से नियंत्रित करने की क्षमता है, और यह केवल लाभ है जिसे मैं कैनवास का उपयोग करते समय देखता हूं।ग्रिड बनाम कैनवास

मुझे डब्ल्यूपीएफ में उस अनुभव का अनुमान लगाने के लिए इतना अनुभव नहीं था कि लेआउट पर ग्राहक अनुरोधों से मुझे किस तरह की समस्याएं मिल सकती हैं। वेब फॉर्मों पर मैं कभी-कभी फॉर्म के लिए पूर्ण स्थिति का उपयोग करता हूं, अगर ग्राहक के पास कुछ "विशेष" अनुरोध होता है कि क्या नियंत्रण पिक्सेल दाएं या बाएं आदि पर है या नहीं। हर कोई ग्राहकों की मांग के साथ काम करता है कि मेरा क्या मतलब है।

मैं देखना चाहता हूं कि आप क्या सोचते हैं, व्यवसाय अनुप्रयोग फ़ॉर्म लेआउट बिल्डिंग में दोनों के लिए पेशेवर और विपक्ष क्या हैं? दूसरे की तुलना में बेहतर क्यों है? कोई भी मामला जहां एक पैनल का उपयोग करने में बुरा होगा, और अन्य नहीं? एक पैनल के दूसरे नुकसान क्या हैं? आप किस पैनल का उपयोग करेंगे?

धन्यवाद

उत्तर

16

कैनवास ज्यादातर किसी और चीज से अधिक कस्टम ड्राइंग कार्यक्षमता के लिए करना है। ग्रिड निश्चित रूप से आपके लेआउट को अनुकूलित करने के लिए उपलब्ध सर्वोत्तम विकल्प है।

+0

मैं CSharperWithJava से सहमत: वैकल्पिक रूप से आप (UWP) का उपयोग कर सकते। – Giffyguy

+1

आप एक ग्रिड या पैनल आधारित लेआउट के साथ जाना चाहते हैं। WPF लेआउट सिस्टम के एमएसडीएन अवलोकन पर एक नज़र डालें: http://msdn.microsoft.com/en-us/library/ms745058.aspx – rmoore

+0

यहां ग्रिड लेआउट के साथ स्टार्टर प्राप्त करने के लिए एक ट्यूटोरियल है: http: // www .wpftutorial.net/GridLayout.html – CodeFusionMobile

2

निश्चित रूप से ग्रिड आपकी आवश्यकताओं के लिए आवश्यक हैं।

मैं html में तालिकाओं के लिए ग्रिड की तुलना होगा (बहुत उपयोगी है जब उचित रूप से प्रयोग किया जाता), जबकि कैनवास अधिक एक div की तरह है। अंतर यह है कि ग्रिड HTML में कौन सी टेबल होनी चाहिए और इसी तरह div के बनाम कैनवास के साथ होना चाहिए।

ग्रिड के विषय पर, समय नहीं बल्कि सही ढंग से सब कुछ की स्थिति के लिए अपने नियंत्रण पर मार्जिन की डाल से, अपने RowDefinitions और ColumnDefinitions परिभाषित करने के लिए ले लो। यदि आप नहीं करते हैं तो आपको खेद होगा।

+2

हू ... आप जानते हैं कि लेआउट उद्देश्यों के लिए टेबल का उपयोग करने की सिफारिश नहीं की जाती है, है ना? – luiscubal

+0

बिल्कुल, लेकिन इस उदाहरण के लिए मैं कुछ उदाहरण के रूप में उपयोग करना चाहता था, मुझे लगा कि यह सबसे अच्छा उदाहरण होगा। जैसा कि मैंने उल्लेख किया है, डब्ल्यूपीएफ में ग्रिड एचटीएमएल में कौन सी टेबल बनने की कोशिश कर रहे थे। –

3

आप बहुत ग्रिड, स्तंभ/पंक्ति में फैले चौड़ाई, ऊँचाई की वास्तविक लेआउट के साथ गहराई में प्राप्त कर सकते हैं, आदि

मेरी राय में एक पर विभिन्न मदों के लेआउट करने के लिए आसान होगा है पंक्ति और स्तंभ sizez को नियंत्रित करने के लिए सब कुछ करते हैं की तुलना में द्वारा ग्रिड कठिन एक कैनवास में कोडित। यह भी चीजों को आसान अगर वे सड़क के नीचे बाद में प्रस्तावों को बदलने का फैसला कर देगा।

एडम नाथन के से WPF Unleashed (पी। 168):

ग्रिड के साथ एक कैनवास की नक़ल करना आप एक ही पंक्ति और स्तंभ के साथ ग्रिड छोड़ दो और HorizontalAlignment और सभी के VerticalAlignment सेट करते हैं खिंचाव के अलावा अन्य मूल्यों के लिए बच्चों, बच्चों सिर्फ एक कैनवास की तरह एकल कक्ष में जोड़ दी। क्षैतिज एलाइनमेंट को बाएं और पर सेट करना शीर्ष पर वर्टिकल एलाइनमेंट कैनवास। लिफ्ट और कैनवास सेट करने जैसा है। 0 पर जाएं दाएं और लंबवत के लिए क्षैतिज हस्ताक्षर नीचे कैनवास। राइट और कैनवास। 0 तक बॉटम।इसके अलावा, प्रत्येक तत्व पर मार्जिन मान लागू करने से आपको कैनवास की संलग्न गुणों को उसी मानों को सेट करने के समान प्रभाव मिल सकता है।

आप ग्रिड में अपने नियंत्रण की सामग्री के साथ लेआउट नियंत्रण का एक बेहतर स्तर प्राप्त करने के लिए रचनात्मक भी हो सकते हैं।

एक कैनवास एक संवाद बॉक्स की तरह कुछ के लिए अच्छा होगा जो शायद ही कभी आकार बदल देगा, और केवल इसके कुछ नियंत्रण होंगे, क्योंकि संख्या बढ़ने के साथ ही उन्हें बाहर निकालने में समय लगेगा।

मैं व्यक्तिगत रूप से ग्रिड का उपयोग करता हूं। यह चीजों को पिक्सेल स्तर पर रखने के लिए थोड़ा और काम हो सकता है लेकिन आवश्यक समय के 5% के लिए यह बहुत परेशानी दूर करने के लिए लायक है। यह भी अच्छा है जब फ्लाई पर पंक्तियों और स्तंभों का आकार बदलने की आवश्यकता होती है, तो ग्रिडस्प्लिटर इसे एक स्नैप बनाता है।

0

भले ही आप वीएस डिजाइनर का उपयोग नहीं कर सकते हैं, फिर भी आप अपनी ग्रिड सामग्री बनाने/संपादित करने के लिए एक्सएएमएल विजुअल डिजाइनर का उपयोग कर सकते हैं।

WPF/SL/XAML के प्राथमिक यूएक्स लाभों में से एक HTML- जैसे 'तरल' लेआउट क्षमता है। भले ही आपको अपने वर्तमान डिजाइन के साथ इसकी आवश्यकता न हो, फिर भी यह स्पष्ट रूप से भविष्य और अच्छी तरह से सीखने योग्य है कि सीखने के लिए कैसे। उपलब्ध XAML editors

+0

टूटा लिंक, कृपया ठीक करें – kbo4sho88

0

मैं एक ग्रिड या एक विशेष ग्रिड उपवर्ग के साथ जाना होगा की

चेक रोब Relyea उत्तम सूची। आप विरासत देखें के बारे में सही हैं। यूडब्लूपी में विजुअल स्टूडियो डिजाइनर, डब्ल्यूपीएफ उसी विधि नाम के साथ बेस और सबक्लास के लिए समर्थन कोड उत्पन्न करता है। यह संकलित नहीं करता है।

चूंकि मैं जेनिक्स की पूर्व-तारीख करता हूं, हम पिछली पद्धतियों पर वापस जा सकते हैं। इनमें से एक एक सहायक वर्ग है। प्रत्येक दृश्य IBaseView लागू करता है और इसकी संपत्ति ViewHelper या ViewHelper<T> है। enum ViewHelperOptions की भी आवश्यकता हो सकती है। यदि आवश्यक हो, तो प्रत्येक ViewHelpers दृश्य डिजाइनर को तोड़ने के बिना विरासत का उपयोग कर सकते हैं। यह एमवीवीएम मॉडल को तोड़ने के बिना सामान्य कोड के साथ-साथ विशिष्ट दृश्य कोड के उपयोग की अनुमति देता है। आइए इसे एमवीएचवीएम कहते हैं क्योंकि व्यूहेल्पर को व्यूहेल्पर का ज्ञान है। यह वी को वीएम से अलग करता है।

पूर्ण कार्यान्वयन के लिए Activator.CreateInstance के उपयोग की आवश्यकता हो सकती है। एक और विचार रचनाकारों द्वारा कन्स्ट्रक्टर्स द्वारा बुलाया जाता है। आपको लोड किए गए ईवेंट (कहने) से उत्पन्न होने वाले प्रारंभिकरण में सभी "विल-क्रैश-अगर-नहीं-चल रहे" कोड को स्थानांतरित करना होगा। - सामान्य यूआई लेआउट के लिए एक अधिक व्यावहारिक तत्व है

if (!Windows.ApplicationModel.DesignMode.DesignModeEnabled) 
{ DoStuffWhichShouldOnlyBeDoneAtRunTime(); } 
संबंधित मुद्दे