में मार्कअप एक्सटेंशन क्या किसी ने कभी भी WPF या Silverlight में कस्टम मार्कअप एक्सटेंशन बनाया है? आप कभी कब चाहते हैं या ऐसा करने की आवश्यकता है? इसे कैसे करें इस पर कोई सुझाव या स्रोत?डब्ल्यूपीएफ/सिल्वरलाइट
उत्तर
हाँ यह आसान है और मैंने खुद को बनाया है। मैंने इवलबाइंडिंग नामक एक मार्कअप एक्सटेंशन बनाया जो बच्चों और सी # मूल्यांकन स्ट्रिंग के रूप में बाइंडिंग का एक सेट लेता है। यह बच्चे के बाइंडिंग से मूल्यों को संसाधित करने के लिए सी # का मूल्यांकन करता है ताकि मुझे कई सरल टाइप कनवर्टर कक्षाएं बनाने की आवश्यकता न हो।
उदाहरण के लिए मैं यह कर सकता ...
<EvalBinding Eval="(this[0] > this[1] ? 'GT' : 'LTE')">
<Binding ElementName="element1" Path="Size"/>
<Binding ElementName="element2" Path="Size"/>
<EvalBinding>
कहाँ इस बच्चे बंधन परिणामों की सरणी के लिए एक संदर्भ है।
एक MarkupExtension लागू करने पर संसाधनों के लिए ...
एक और उदाहरण के लिए Localization
नोट होगा: आप कस्टम मार्कअप नहीं लिख सकते हैं चांदी की रोशनी में विस्तार।
आह, उस में एक और कई सीमाएं है में कर रहे हैं,। मैं मिक्स के लिए इंतजार नहीं कर सकता, इसलिए अगर मैं इस छल को ठीक करता हूं तो मैं समझ सकता हूं। –
निराशा के कड़वाहट आँसू। – cplotts
हुरेय !!
यह सिल्वरलाइट 5 में लागू किया गया है !!
और इसके अलावा, अब यह कक्षा के बजाय एक सामान्य इंटरफ़ेस है !!
उदाहरण के लिए this पढ़ें।
मुझे पता है कि यह पुरानी पोस्ट है, लेकिन मैं अपनी सत्यापन बाइंडिंग को मानकीकृत करने के लिए मार्कअप एक्सटेंशन का उपयोग करता हूं। तो यहां लाभ छोटा है, 4 डिफ़ॉल्ट जो मुझे अब सेट नहीं करना है, और यदि मैं उन्हें भविष्य में बदलना चाहता हूं, तो मैं इसे यहां ही करता हूं।
using System;
using System.Windows.Data;
using System.Windows.Markup;
namespace ITIS
{
/// <summary>
/// Creates a normal Binding but defaults NotifyOnValidationError to True,
/// ValidatesOnExceptions to True, Mode to TwoWay and
/// UpdateSourceTrigger to LostFocus.
/// </summary>
public sealed class ValidatedBinding : MarkupExtension
{
public ValidatedBinding(string path)
{
Mode = BindingMode.TwoWay;
UpdateSourceTrigger = UpdateSourceTrigger.LostFocus;
Path = path;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return new Binding(Path) {
Converter = this.Converter,
ConverterParameter = this.ConverterParameter,
ElementName = this.ElementName,
FallbackValue = this.FallbackValue,
Mode = this.Mode,
NotifyOnValidationError = true,
StringFormat = this.StringFormat,
ValidatesOnExceptions = true,
UpdateSourceTrigger = this.UpdateSourceTrigger
};
}
public IValueConverter Converter { get; set; }
public object ConverterParameter { get; set; }
public string ElementName { get; set; }
public object FallbackValue { get; set; }
public BindingMode Mode { get; set; }
public string Path { get; set; }
public string StringFormat { get; set; }
public UpdateSourceTrigger UpdateSourceTrigger { get; set; }
}
}
आप WPF या Silverlight के बारे में बात यह एक बहुत अलग से नरक है, विशेष रूप से इस पहलू ... – Shimmy