अंतर इन 2 बाइंडिंग के बीच क्या है?WPF TemplateBinding बनाम RelativeSource TemplatedParent
उत्तर
टेम्पलेट बाइंडिंग बिल्कुल वही बात नहीं है। एमएसडीएन दस्तावेज़ अक्सर उन लोगों द्वारा लिखे जाते हैं जिन्हें सॉफ़्टवेयर सुविधाओं के बारे में मोनोसिलैबिक एसडीई को प्रश्नोत्तरी करना होता है, इसलिए बारीकियां बिल्कुल सही नहीं होती हैं।
टेम्पलेट बाइंडिंग का मूल्यांकन नियंत्रण टेम्पलेट में निर्दिष्ट प्रकार के विरुद्ध संकलन समय पर किया जाता है। यह संकलित टेम्पलेट्स के बहुत तेज त्वरण के लिए अनुमति देता है। बस टेम्पलेट बाइंडिंग में नाम फेंक दें और आप देखेंगे कि कंपाइलर इसे ध्वजांकित करेगा।
बाध्यकारी मार्कअप रनटाइम पर हल किया गया है। निष्पादित करने के लिए धीमे होने पर, बाध्यकारी उन संपत्ति नामों को हल करेगी जो टेम्पलेट द्वारा घोषित प्रकार पर दिखाई नहीं दे रहे हैं। धीरे-धीरे, मैं इंगित करूंगा कि बाध्यकारी संचालन के बाद से इसके प्रकार के रिश्तेदार एप्लिकेशन के सीपीयू से बहुत कम लेते हैं। यदि आप उच्च गति पर चारों ओर नियंत्रण टेम्पलेट्स को नष्ट कर रहे थे तो आप इसे देख सकते हैं।
अभ्यास के मामले में टेम्पलेट बाइंडिंग का उपयोग करें जब आप बाध्यकारी से डर नहीं सकते हैं।
का उपयोग करना होगा, इसलिए मुख्य याद रखने के लिए सोचें: टाइम बनाम रनटाइम संकलित करें। यदि आप रनटाइम के दौरान इसे बदलने का प्रयास करते हैं तो टेम्पलेट बाइंडिंग काम नहीं करेगी। सही ? –
यह भी ध्यान रखें कि टेम्पलेट बाइंडिंग के बजाए बाइंडिंग का उपयोग करके डिजाइन समय के दौरान आप जो देखते हैं उसके प्रभाव हो सकते हैं। कुछ कॉन्फ़िगरेशन में, {बाध्यकारी सापेक्ष स्रोत ...} का उपयोग करके बाध्य किए गए गुण डिज़ाइनर में दिखाई नहीं देंगे (हालांकि वे अभी भी रन टाइम के दौरान दिखाई देते हैं), लेकिन यदि आप {TemplateBinding ...} का उपयोग करने के लिए स्विच करते हैं तो उन गुणों का मूल्यांकन किया जाता है डिजाइन समय के दौरान। – lfalin
इन्हें उसी तरह उपयोग किया जाता है लेकिन उनमें कुछ अंतर होते हैं। यहाँ TemplateBinding प्रलेखन के लिए एक लिंक है: http://msdn.microsoft.com/en-us/library/ms742882.aspx
TemplateBinding TemplatedParent साथ बाइंडिंग के लिए एक आशुलिपि है लेकिन यह बाध्यकारी वर्ग के सभी क्षमताओं, उदाहरण के लिए आप TemplateBinding से Binding.Mode नियंत्रित नहीं कर सकते का खुलासा नहीं करता।
मैंने सोचा कि टेम्पलेट बाइंडिंग फ्रीजबल प्रकारों का समर्थन नहीं करता है (जिसमें ब्रश ऑब्जेक्ट्स शामिल हैं)। समस्या के आसपास पाने के लिए। कोई टेम्पलेटेड पेरेंट
का उपयोग कर सकता है एक और बात - टेम्पलेट बाइंडिंग वैल्यू कनवर्टिंग की अनुमति नहीं देती है। वे आपको कनवर्टर पास करने की अनुमति नहीं देते हैं और उदाहरण के लिए int को स्ट्रिंग में स्वचालित रूप से परिवर्तित नहीं करते हैं (जो बाइंडिंग के लिए सामान्य है)।
धन्यवाद मिरोस्लाव, यह समस्या थी जिसे मैं सामना कर रहा था, टेम्पलेटेड पेरेंट का उपयोग करने के लिए स्विचिंग समस्या हल हो गई। – MikeKulls
TemplateBinding - अधिक नियमित रूप से उपयोग करते हुए
- अधिक एक बाध्यकारी लेकिन यह है कम कार्यक्षमता
- केवल एक ControlTemplate का दृश्य पेड़ के अंदर काम करता है की तुलना में कुशल बाइंडिंग से सीमित
- पर गुणों के साथ काम नहीं करता फ्रीजबल्स
- कंट्रोल टेम्पलेट के ट्रिगर
- में काम नहीं करता है बसने में शॉर्टकट प्रदान करता है जी गुण (वर्बोज़ के रूप में नहीं), उदाहरण के लिए।{TemplateBinding targetProperty}
नियमित Binding - TemplateBinding की सीमाओं
- का सम्मान करता है जनक गुण
- पुनः निर्धारित करता है लक्ष्य मान किसी भी स्पष्ट रूप से सेट मूल्यों
- उदाहरण बाहर खाली करने के लिए ऊपर नहीं है: < एलिप्स भरें = "{बाध्यकारी सापेक्ष स्रोत = {सापेक्ष स्रोत टेम्पलेटेड माता-पिता}, पथ = पृष्ठभूमि}"/>
RelativeSource TemplatedParent
यह मोड नियंत्रण कि ControlTemplate लिए आवेदन किया है की एक संपत्ति के लिए एक दिया ControlTemplate संपत्ति टाई सक्षम बनाता है। अच्छी तरह से यहां मुद्दा यह समझने के लिए
<Window.Resources>
<ControlTemplate x:Key="template">
<Canvas>
<Canvas.RenderTransform>
<RotateTransform Angle="20"/>
</Canvas.RenderTransform>
<Ellipse Height="100" Width="150"
Fill="{Binding
RelativeSource={RelativeSource TemplatedParent},
Path=Background}">
</Ellipse>
<ContentPresenter Margin="35"
Content="{Binding RelativeSource={RelativeSource
TemplatedParent},Path=Content}"/>
</Canvas>
</ControlTemplate>
</Window.Resources>
<Canvas Name="Parent0">
<Button Margin="50"
Template="{StaticResource template}" Height="0"
Canvas.Left="0" Canvas.Top="0" Width="0">
<TextBlock FontSize="22">Click me</TextBlock>
</Button>
</Canvas>
अगर मैं अपने नियंत्रण टेम्पलेट के लिए दिए गए नियंत्रण के गुणों को लागू करने के तो मैं TemplatedParent मोड का उपयोग कर सकते हैं bellow एक उदाहरण है। इस मार्कअप एक्सटेंशन में भी ऐसा ही एक है जो टेम्पलेट बाइंडिंग है जो पहले के एक छोटे से हाथ का एक छोटा सा हाथ है, लेकिन टेम्पलेट बाइंडिंग का परीक्षण टेम्पलेटेड पेरेंट के विपरीत संकलन समय पर किया जाता है जिसका मूल्यांकन पहले रन के बाद किया जाता है। जैसा कि आप बोले आंकड़े में टिप्पणी कर सकते हैं, पृष्ठभूमि और सामग्री बटन के भीतर से नियंत्रण टेम्पलेट पर लागू होती है।
- 1. WPF
- 2. WPF MVVM का उपयोग कर: RelativeSource
- 3. WPF - पैरेंट
- 4. अद्यतन स्रोत TemplateBinding
- 5. कस्टम WPF शैली
- 6. RelativeSource FindAncestor मुद्दा
- 7. WPF StackPanel लेआउट प्रश्न
- 8. अभिभावक टेम्पलेट्स (WPF)
- 9. WPF:
- 10. WPF ControlTemplate बनाम UserControl
- 11. WPF बनाम Silverlight
- 12. WPIndex बनाम कीबोर्डNavigation.TabIndex WPF
- 13. सिल्वरलाइट बनाम WPF
- 14. WPF ब्राउज़र अनुप्रयोग बनाम WPF डेस्कटॉप एप्लिकेशन
- 15. WPF
- 16. WPF
- 17. डब्ल्यूपीएफ ग्रिड व्यू हेडर क्षैतिज
- 18. WPF टेक्स्ट लपेटें बनाम WrapWithOverflow
- 19. WPF: XAML बनाम कोड -12
- 20. WPF: बटन टेम्पलेट बनाम ContentTemplate
- 21. WPF TabItem हैडर स्टाइलिंग
- 22. कैसे WPF
- 23. उपयोगकर्ता नियंत्रण के भीतर से दोवे बाध्यकारी का उपयोग कैसे करें?
- 24. स्टाइलिंग ग्रिडस्प्लिटर wpf सी #
- 25. WPF
- 26. DataContext अभिभावक WPF
- 27. WPF टूलकिट बनाम WPV टूलकिट बनाम ListView - कोई लाभ?
- 28. स्टाइल में WPF बाध्यकारी
- 29. WPF बाध्यकारी विफलता प्रदर्शन हिट बनाम अपवाद
- 30. ControlTemplate में टेम्पलेट बाइंडिंग का उपयोग करना। ट्रिगर
यदि आपको दोवे बाइंडिंग की आवश्यकता है, तो आपको दूसरे विकल्प –