2012-08-10 23 views
6

हमारे पास एक उपयोगकर्ता नियंत्रण वाला एक WPF पृष्ठ है जहां हम बिटमैप कैश का उपयोग करते हैं - जब हम इस तत्व को खाली पथ (डेटा पथिंग) के साथ खाली पथ (नया पथ()) अपडेट करके साफ़ करने का प्रयास करते हैं, यह पूरी तरह से ताज़ा/साफ़ नहीं है। यदि मैं विंडो आकार को थोड़ा सा क्षेत्र बदलता हूं जहां बिटमैप कैश सक्रिय है तो पूरी तरह से साफ़ हो जाता है।WPF का बिटमैप कैश पूरी तरह से साफ़ नहीं किया गया है

क्या बिटमैप कैश का उपयोग करने वाले तत्व को साफ़/रीफ्रेश करने के लिए कुछ खास है?

<me:ScrollViewer 
    RenderedWaves="{Binding RenderedWaves}" 
    ItemTemplate="{DynamicResource DataTemplateForWaveItem}" 
    ItemsPanel="{DynamicResource ItemsPanelTemplateForWaveItems}" 
    CacheMode="BitmapCache" /> 

मैंने सोचा कि मैं यह तय हो गई है, लेकिन यह नहीं काम करता है हर बार ...

इस कोड पथ सेट करने के लिए नहीं करता है ':

यह हमारे कोड है टी बिटमैप कैश को तत्काल अपडेट नहीं करें:

Protected WriteOnly Property SetGraph As Path 
Set(value As Path) 
    If value Is Nothing Then value = GetEmptyPath() 
    _graph = value 
    OnPropertyChanged(New PropertyChangedEventArgs(PropertyNameGraph)) 
End Set 
End Property 
,210

और इस कोड यह कभी कभी अद्यतन करता है:

Protected WriteOnly Property SetGraph As Path 
Set(value As Path) 
    UIDispatcherLocator.UIDispatcher.Invoke(Sub() 
               If value Is Nothing Then value = GetEmptyPath() 
               _graph = value 
              End Sub, Threading.DispatcherPriority.Background) 
    OnPropertyChanged(New PropertyChangedEventArgs(PropertyNameGraph)) 
End Set 
End Property 
+0

आप हमें थोड़ा और बता सकते हैं? इतना जटिल क्यों? –

+0

अगर मैं सट्टेबाजी करने वाला व्यक्ति था तो मैं कहूंगा कि आपके पास विद्या कार्ड के मुद्दे हैं। क्या आप एक न्यूनतम उदाहरण प्रदान कर सकते हैं जो repros? – Will

+0

आप कोड-बैक से अमान्येट विज़ुअल() को कॉल कर सकते हैं, यह देखने के लिए कि – ekholm

उत्तर

0

तुम सिर्फ जब जरूरत आग वस्तु पर एक नई घटना कर सकते थे और जब वस्तु स्थापित करेगा बुलाया = नई वस्तु एक उपयोग बयान करता है, तो द्वारा अस्थायी बनाया गया था कि करने के लिए आप इसे system.idisposable से प्राप्त कर सकते हैं या यदि आप इसे पूरा करने के लिए बस इसे शून्य पर सेट करते हैं? मुझे इसके सिर के ऊपर से कोड नहीं पता है, लेकिन कुछ ऐसा है:

MyEvent += new event(object b); 

event(object b) 
{ 
    using (custom_ScrollViewer = new custom_ScrollViewer) 
{ 
OnScreen_ScrollViewer = Custom_ScrollViewer; 

}; 
// or 
custom_ScrollViewer = new custom_ScrollViewer; 
OnScreen_ScrollViewer = Custom_ScrollViewer; 
custom_ScrollViewer = null; 

}