2012-08-10 14 views
6

Abbiamo una pagina WPF con un controllo utente in cui utilizziamo un BitmapCache - quando proviamo a cancellare questo elemento aggiornando la proprietà (associazione dati) con un percorso vuoto (nuovo percorso()), non è completamente aggiornato/cancellato. Se cambio leggermente la dimensione della finestra, l'area in cui BitmapCache è attivo viene completamente cancellata.BitmapCache di WPF non è completamente azzerato

C'è qualcosa di speciale da fare per cancellare/aggiornare un elemento che utilizza BitmapCache?

Questo è il nostro codice:

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

ho pensato ho riparato, ma non funziona sempre ...

Questo codice per impostare il percorso doesn' t aggiornare immediatamente 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 

E questo codice aggiorna a volte:

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

Ci puoi dire un po 'di più? Perché così complicato? –

+0

Se fossi un uomo delle scommesse, direi che hai problemi con la carta vidya. Potete fornire un esempio minimo di repros? – Will

+0

Puoi chiamare InvalidateVisual() dal code-behind, per vedere se questo aiuta – ekholm

risposta

0

potrebbe hai appena fatto un nuovo evento per l'oggetto a fuoco quando necessario e quando viene chiamato fisserebbe oggetto = al nuovo oggetto che è stato creato temporanea da una dichiarazione l'uso, se potresti ereditarlo da system.idisposable o se lo hai appena impostato su null quando hai finito? Non conosco il codice per la parte superiore della mia testa, ma qualcosa del tipo:

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; 

} 
Problemi correlati