से कस्टम मार्कअप एक्सटेंशन सेट करें आप कोड से कस्टम MarkupExtension
कैसे सेट करते हैं?कोड
आप आसानी से Xaml से सेट कर सकते हैं। यह Binding
और DynamicResource
के लिए जाता है। उपयोग textBox.SetBinding या BindingOperations.SetBinding
Binding binding = new Binding("MyFontSize");
BindingOperations.SetBinding(textBox, TextBox.FontSizeProperty, binding);
DynamicResource:
<TextBox FontSize="{Binding MyFontSize}"
Style="{DynamicResource MyStyle}"
Text="{markup:CustomMarkup}"/>
कोड के माध्यम से ही मान की स्थापना के पीछे एक छोटे से अलग दृष्टिकोण
बाइंडिंग की आवश्यकता है SetResourceReference
का उपयोग करेंtextBox.SetResourceReference(TextBox.StyleProperty, "MyStyle");
CustomMarkup: मैं कोड से एक कस्टम
MarkupExtension
कैसे सेट करूँ? मैंProvideValue
बुलाना चाहिए और यह कि मामला, मैं कैसे एकIServiceProvider
? *CustomMarkupExtension customExtension = new CustomMarkupExtension(); textBox.Text = customExtension.ProvideValue(??);
की पकड़ मैंने पाया आश्चर्यजनक रूप से इस विषय पर थोड़ा हां, तो यह किया जा सकता है मिलता है?
एचबी। ने इस प्रश्न का उत्तर दिया है। मैं यहां कुछ विवरण जोड़ रहा हूं कि मैं ऐसा क्यों करना चाहता था। मैंने निम्नलिखित समस्या के लिए एक समाधान बनाने की कोशिश की।
समस्या यह है कि आप Binding
से प्राप्त नहीं कर सकते हैं और इसे सील कर दिए जाने के बाद ProvideValue
ओवरराइड कर सकते हैं। आपको इसके बजाय ऐसा कुछ करना होगा: A base class for custom WPF binding markup extensions। लेकिन फिर समस्या यह है कि जब आप Binding
को Setter
पर वापस लेते हैं तो आपको अपवाद मिलता है, लेकिन Style
के बाहर यह ठीक काम करता है।
मैं कई स्थानों है कि आप MarkupExtension
ही लौटना चाहिए अगर TargetObject
एक Setter
है एक बार यह एक वास्तविक FrameworkElement
करने के लिए लागू किया जा रहा है और इस समझ में आता है यह reeavaluate को अनुमति देने के लिए पढ़ा है।
- Markup Extension in Data Trigger
- Huge limitation of a MarkupExtension
- A base class for custom WPF binding markup extensions (टिप्पणी में)
हालांकि, कि केवल काम करता है जब TargetProperty
प्रकार object
की है, अन्यथा अपवाद वापस आ गया है। यदि आप BindingBase
के लिए स्रोत कोड देखते हैं तो आप देख सकते हैं कि यह वास्तव में ऐसा करता है लेकिन ऐसा लगता है कि ढांचे में कुछ गुप्त घटक हैं जो इसे काम करता है।
हे एचबी। हां, मैंने इसे भी पढ़ा, हालांकि मैं उम्मीद कर रहा था कि अभी भी एक रास्ता होगा। यह बहुत बुरी खबर है और कस्टम 'मार्कअप एक्सटेंशन' अर्ध-कार्यशील अवधारणा की तरह दिखता है। यदि लक्ष्यप्रोपर्टी प्रकार 'ऑब्जेक्ट' नहीं है, तो उन्हें 'स्टाइल' 'सेटर' में उपयोग नहीं किया जा सकता है, इसलिए मैं इस मुद्दे को अपने आप को एक संलग्न व्यवहार में जोड़कर काम करने की उम्मीद कर रहा था लेकिन वहां वह योजना है। वैसे भी, आपके उत्तर के लिए धन्यवाद –
@Meleak: ठीक है, जैसा कि नाम कहता है मार्कअप एक्सटेंशन मार्कअप का विस्तार करता है, वे वास्तव में कोड में उपयोग करने के लिए नहीं हैं। मैं रास्ते में Setters में MarkupExtensions के उपयोग के साथ किसी भी समस्या का पुनरुत्पादन नहीं कर सकता। –
मैं मानता हूं, यह नाम से निहित है, अभी भी एक तरह से उम्मीद है :) मैं अपनी टिप्पणी में वास्तव में स्पष्ट नहीं था, समस्या तब होती है जब आप 'सेटर' को 'बाध्यकारी' मान प्रदान करते हैं। आपने प्रश्न का उत्तर दिया है और मैं आपका उत्तर स्वीकार करता हूं। कुछ प्रश्नों को जोड़ा गया कि मैं अपने प्रश्न –