2012-08-10 11 views
6

Tenemos una página WPF con un control de usuario donde utilizamos un BitmapCache - cuando tratamos de borrar este elemento actualizando la propiedad (Enlace de Datos) con un Camino vacío (Nuevo Camino()), no está completamente refrescado/despejado. Si cambio el tamaño de la ventana un poco, el área donde está activada la BitmapCache está completamente borrada.El BitmapCache de WPF no está completamente borrado

¿Hay algo especial que hacer para borrar/actualizar un elemento que utiliza BitmapCache?

Este es nuestro código:

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

pensé que me fijo, pero no funciona todo el tiempo ...

Este código para establecer la ruta doesn' t actualizar el BitmapCache inmediatamente:

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 

Y este código actualiza a veces:

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

¿Puede decirnos un poco más? ¿Por qué tan complicado? –

+0

Si yo fuera un apostador, diría que tienes problemas con las tarjetas vidya. ¿Puedes dar un ejemplo mínimo de repros? – Will

+0

Puede invocar InvalidateVisual() desde el código subyacente, para ver si eso ayuda – ekholm

Respuesta

0

puede que acaba de realizar un nuevo evento en el objeto para disparar cuando sea necesario y cuando se le fijaría objeto = a nuevo objeto que se creó temporal mediante un comunicado de usar si ¿podría hacer que herede del sistema.disponible o si acaba de establecer en nulo cuando haya terminado? No sé el código para eso de la parte superior de mi cabeza, pero algo como:

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; 

} 
Cuestiones relacionadas