2011-03-28 11 views
5

में परिभाषित नियंत्रणों के उदाहरण बनाएं मेरे पास xaml में परिभाषित नियंत्रण है जो काफी हद तक गुण सेट के साथ कोड में पुन: पेश करना मुश्किल है। क्या मैं xaml में नियंत्रण को परिभाषित कर सकता हूं और किसी भी तरह के कोड में इसके उदाहरण बना सकता हूं?WPF xaml

+0

नियंत्रण केवल XAML में परिभाषित नहीं किया जा सकता है, आपके पास अभी भी इसके लिए एक कोड होगा, हालांकि कुछ मामलों में कोड में केवल 'प्रारंभिक कॉम्पोनेंट() 'पंक्ति हो सकती है। – Snowbear

+0

मैं इसे समझता हूं। लेकिन उदाहरण के लिए कहें कि मेरे पास xaml में परिभाषित टेक्स्टबॉक्स है। क्या मैं कोड में समान गुणों के साथ एक ही टेक्स्टबॉक्स के उदाहरण बना सकता हूं? – Aks

+1

क्या आपको इसे कोड में बनाने की ज़रूरत है, या क्या आपको बस उन संपत्ति मूल्यों को दोहराने में सक्षम होना चाहिए? उत्तरार्द्ध करने के तरीके के बारे में एक सरल उदाहरण के लिए मेरा उत्तर देखें ... –

उत्तर

10

एक अन्य विकल्प के साथ एक्स एक संसाधन के रूप नियंत्रण बनाने के लिए है: साझा = "false" संपत्ति आप प्रत्येक संकल्प पर नए उदाहरणों प्राप्त करना चाहते हैं:

<UserControl.Resources> 
    <Rectangle x:Key="MyControl" x:Shared="False" 
      ... 
      /> 
</UserControl.Resources> 

कोड में:

var myNewCtrl = this.FindResource("MyControl") as Rectangle; 
// use control 
+0

ओह, +1! मुझे कभी याद नहीं है 'एक्स: साझा' :-) –

+0

सुंदर। धन्यवाद – Aks

0

क्या आपने उपयोगकर्ता नियंत्रण के रूप में नियंत्रण बनाने पर विचार किया है?

+0

कोई बुरा विचार नहीं है, लेकिन यदि आप बार-बार 'टेक्स्टबॉक्स' पर विशिष्ट गुण सेट करना चाहते हैं तो यह अधिक हो सकता है। –

0

हाँ आप XamlReader का उपयोग करके कर सकते हैं: http://msdn.microsoft.com/en-us/library/system.windows.markup.xamlreader.aspx। अपने xaml मार्कअप युक्त स्ट्रीम को पास करने वाली स्थिर विधि लोड का उपयोग करें। आप एक ऑब्जेक्ट प्राप्त करते हैं जो आपका नियंत्रण उदाहरण है।

1

आप Xaml शैली का उपयोग करके किसी भी गुण को सेट कर सकते हैं, और उस शैली को फिर से लागू कर सकते हैं - या तो सीधे नियंत्रण के एक अलग उदाहरण पर, या एक अलग शैली के आधार के रूप में। उत्तरार्द्ध आपको अपनी सामान्य गुणों को निर्दिष्ट करने की अनुमति देगा लेकिन फिर भी, प्रत्येक नियंत्रण के लिए अलग-अलग दृश्य सेटिंग्स हैं।

तो, बजाय यह पुन: पेश करने की कोशिश कर के:

<TextBlock Width="100" Height="40" FontSize="10" ClipToBounds="True" /> 

... एक साझा संसाधन फ़ाइल में इस परिभाषित:

<Style TargetType="TextBlock" x:Key="myStyle"> 
    <Setter Property="Width" Value="100" /> 
    <Setter Property="Height" Value="40" /> 
    <Setter Property="FontSize" Value="10" /> 
    <Setter Property="ClipToBounds" Value="True" /> 
</Style> 

... और फिर मार्कअप में इस का उपयोग करें:

<TextBlock Style="{StaticResource myStyle}" /> 

वही सिद्धांत किसी भी नियंत्रण और गुणों के किसी भी सेट पर लागू होता है।

+0

शैली वास्तव में एक अच्छा समाधान है। आप कस्टम/उपयोगकर्ता नियंत्रण को लक्षित करने के लिए शैलियों को भी बना सकते हैं। आप केवल शैलियों में निर्भरता प्रॉपर्टी सेट कर सकते हैं। –