मेरे पास एक नियंत्रण है जो आपको (आपने अनुमान लगाया है) नियंत्रण प्राप्त किया है। जब भी FontSize
या Style
गुण परिवर्तित होते हैं, तो मैं एक अधिसूचना प्राप्त करना चाहता हूं। डब्ल्यूपीएफ में, मैं DependencyProperty.OverrideMetadata()
पर कॉल करके ऐसा करूंगा। बेशक, इस तरह की उपयोगी चीजें सिल्वरलाइट में कोई जगह नहीं है। तो, किसी को किस प्रकार की अधिसूचनाएं मिल सकती हैं?सिल्वरलाइट: विरासत में परिवर्तन की अधिसूचना कैसे प्राप्त करें प्रॉपर्टीप्रॉपर्टी
उत्तर
मुझे लगता है कि यह एक बेहतर तरीका है। अभी भी पेशेवरों और विपक्ष को देखने की जरूरत है।
/// Listen for change of the dependency property
public void RegisterForNotification(string propertyName, FrameworkElement element, PropertyChangedCallback callback)
{
//Bind to a depedency property
Binding b = new Binding(propertyName) { Source = element };
var prop = System.Windows.DependencyProperty.RegisterAttached(
"ListenAttached"+propertyName,
typeof(object),
typeof(UserControl),
new System.Windows.PropertyMetadata(callback));
element.SetBinding(prop, b);
}
और अब, आप की तरह, एक तत्व की एक संपत्ति का एक परिवर्तन सूचना के लिए रजिस्टर करने RegisterForNotification कॉल कर सकते हैं।
RegisterForNotification("Text", this.txtMain,(d,e)=>MessageBox.Show("Text changed"));
RegisterForNotification("Value", this.sliderMain, (d, e) => MessageBox.Show("Value changed"));
सिल्वरलाइट 4.0 बीटा का उपयोग करते हुए एक ही http://amazedsaint.blogspot.com/2009/12/silverlight-listening-to-dependency.html
पर यहाँ मेरी पोस्ट देखें।
यह जो मैं हमेशा का उपयोग है (हालांकि SL पर इसका परीक्षण किया है नहीं, बस WPF पर):
/// <summary>
/// This method registers a callback on a dependency object to be called
/// when the value of the DP changes.
/// </summary>
/// <param name="owner">The owning object.</param>
/// <param name="property">The DependencyProperty to watch.</param>
/// <param name="handler">The action to call out when the DP changes.</param>
public static void RegisterDepPropCallback(object owner, DependencyProperty property, EventHandler handler)
{
// FIXME: We could implement this as an extension, but let's not get
// too Ruby-like
var dpd = DependencyPropertyDescriptor.FromProperty(property, owner.GetType());
dpd.AddValueChanged(owner, handler);
}
मुझे पूरा यकीन है कि दुर्भाग्यवश, निर्भरताप्रॉपर्टी डिस्कार्टिप्टर सिल्वरलाइट में पौराणिक जानवर हैं। – MojoFilter
DependencyPropertyDescriptor सिल्वरलाइट 2 या द्वारा समर्थित नहीं है 3 – markti
आप बाहर से संपत्ति निर्भरता सुन नहीं कर सकते सूचनाएं बदल दिया है।
आप निम्न कोड पंक्ति के साथ निर्भरता संपत्ति मेटाडाटा पहुँच सकते हैं:
PropertyMetadata metaData = Control.ActualHeightProperty.GetMetadata(typeof(Control));
हालांकि, केवल सार्वजनिक सदस्य सामने आ रहा है कि "DefaultValue" है।
तरीके WPF में ऐसा करने की एक भीड़ कर रहे हैं। लेकिन वे वर्तमान में Silverlight 2 या 3
एकमात्र समाधान मैं देख रहा हूँ LayoutUpdated घटना को सुनने के लिए है द्वारा समर्थित नहीं हैं - हाँ, मैं जानता हूँ कि यह एक बहुत कहा जाता है। ध्यान दें कि कुछ मामलों में इसे फ़ॉन्टसाइज़ या स्टाइल बदल दिया गया है, भले ही इसे नहीं कहा जाएगा।
यह एक नहीं बल्कि घृणित हैक है, लेकिन आप एक दो-तरफा बाध्यकारी इस अनुकरण करने के लिए इस्तेमाल कर सकते हैं।
public class FontSizeListener {
public double FontSize {
get { return fontSize; }
set { fontSize = value; OnFontSizeChanged (this, EventArgs.Empty); }
}
public event EventHandler FontSizeChanged;
void OnFontSizeChanged (object sender, EventArgs e) {
if (FontSizeChanged != null) FontSizeChanged (sender, e);
}
}
तो जैसे बाध्यकारी बनाने के लिए::
<Canvas>
<Canvas.Resources>
<FontSizeListener x:Key="listener" />
</Canvas.Resources>
<MyControlSubclass FontSize="{Binding Mode=TwoWay, Source={StaticResource listener}, Path=FontSize}" />
</Canvas>
फिर अपने नियंत्रण उपवर्ग में श्रोता के घटना के लिए ऊपर हुक
अर्थात तरह कुछ है।
जब MyControlSubclass FONTSIZE संपत्ति परिवर्तन, बाध्यकारी स्पष्ट हो जाएगा तो यह यह काम नहीं करता है? नहीं? –
- 1. ऑब्जेक्ट निपटान/विनाश की अधिसूचना प्राप्त करें
- 2. couchdb-python परिवर्तन अधिसूचना
- 3. UIView फ्रेम परिवर्तन अधिसूचना
- 4. अधिसूचना क्षेत्र आइकन की सूची कैसे प्राप्त करें?
- 5. उत्पाद परिवर्तन प्राप्त करें
- 6. एलईडी लाइट अधिसूचना कैसे प्राप्त करें?
- 7. क्या सी # में दिनांक परिवर्तन की अधिसूचना प्राप्त करने का कोई तरीका है?
- 8. एंड्रॉइड में अधिसूचना कैसे करें?
- 9. मीडिया वॉल्यूम परिवर्तन अधिसूचनाएं कैसे प्राप्त करें?
- 10. सिल्वरलाइट में नाम से निर्भरताप्रॉपर्टी कैसे प्राप्त करें?
- 11. डेटाबेस परिवर्तन पर उपयोगकर्ता को अधिसूचना भेजना
- 12. जेएस में प्रोटोटाइप विरासत और मूल गुण कैसे प्राप्त करें
- 13. ईएफ में इकाई परिवर्तन डेल्टा कैसे प्राप्त करें?
- 14. एंड्रॉइड: कस्टम टोस्ट अधिसूचना विरासत डिफ़ॉल्ट टोस्ट
- 15. जेसीकबॉक्स परिवर्तन श्रोता घटनाओं पर माउस की अधिसूचना प्राप्त हो जाती है
- 16. लगातार जावा में परिवर्तन की जांच करें?
- 17. एंड्रॉइड अधिसूचना - कैसे करें?
- 18. जावा प्रक्रिया समाप्ति पर अधिसूचना प्राप्त करें
- 19. सफल निर्माण समाप्त होने पर अधिसूचना कैसे प्राप्त करें?
- 20. आईफोन इनकमिंग कॉल और डिस्प्ले अधिसूचना की पहचान कैसे करें?
- 21. एसएमएस अधिसूचना: ईमेल की सामग्री कैसे प्रदर्शित करें?
- 22. रिलेशनल डेटाबेस में विरासत मॉडलिंग कैसे करें?
- 23. ExtJS 4 में नियंत्रक विरासत कैसे करें?
- 24. सिल्वरलाइट WebBrowser नियंत्रण में पृष्ठ कैसे फ़िट करें?
- 25. सिल्वरलाइट एप्लिकेशन में एचटीएमएल कैसे प्रदर्शित करें?
- 26. onActivityResult "Android" में मेल भेजा अधिसूचना प्राप्त
- 27. किसी भी अधिसूचना के बिना स्थिति बार फ्रेम परिवर्तन
- 28. रजिस्ट्रीकी मान बदल दिया गया था जब अधिसूचना प्राप्त करें
- 29. अधिसूचना की तरह एंड्रॉयड
- 30. परिवर्तन के बाद UIView फ्रेम स्थिति कैसे प्राप्त करें?
मुझे यह पसंद है कि यह बदसूरत बाध्यकारी को लपेटने का एक अच्छा तरीका है, लेकिन यह संपत्ति परिवर्तन अधिसूचनाएं प्राप्त करने का एक बहुत ही भारी तरीका है। – MojoFilter
जब तक हम कोड से पूरी तरह से करने की जरूरत के रूप में, मुझे लगता है जब तक हम सिल्वरलाइट में DependencyPropertyDescriptor एमएस – amazedsaint
से मैं भी इस दृष्टिकोण का उपयोग किया है मिल हम एक और विकल्प नहीं है, दुर्भाग्य से यह स्मृति लीक। मेरे अनुभव में यह आपके द्वारा उपयोग किए जाने वाले तत्व के संदर्भ में एक संदर्भ रखेगा, जो बदले में अन्य वस्तुओं पर निर्भर करेगा।अपराधी कॉलबैक प्रतीत होता है जो आपके आवेदन के जीवन के लिए आपके विचार का संदर्भ बनाए रखेगा। –