2012-08-10 25 views
6

Chúng tôi có một trang WPF với điều khiển người dùng, nơi chúng tôi sử dụng BitmapCache - khi chúng tôi cố gắng xóa phần tử này bằng cách cập nhật thuộc tính (Data Binding) với một đường dẫn trống (New Path()), nó không hoàn toàn được làm mới/xóa. Nếu tôi thay đổi kích thước cửa sổ một chút, nơi BitmapCache đang hoạt động được xóa hoàn toàn.BitmapCache của WPF không được xóa hoàn toàn

Có điều gì đặc biệt để làm để xóa/làm mới phần tử sử dụng BitmapCache không?

Đây là mã của chúng tôi:

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

tôi nghĩ rằng tôi cố định nó, nhưng nó không làm việc mỗi khi ...

Mã này để thiết lập đường dẫn doesn' t cập nhật BitmapCache ngay lập tức:

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

Và đoạn mã này sẽ cập nhật nó đôi khi:

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

Bạn có thể cho chúng tôi biết thêm một chút? Tại sao quá phức tạp? –

+0

Nếu tôi là một cá cược tôi muốn nói rằng bạn có vấn đề về thẻ vidya. Bạn có thể cung cấp một ví dụ tối thiểu mà repros? – Will

+0

Bạn có thể gọi InvalidateVisual() từ mã sau, để xem điều đó có giúp ích cho – ekholm

Trả lời

0

thể bạn vừa thực hiện một sự kiện mới trên đối tượng để bắn khi cần thiết và khi gọi sẽ thiết lập đối tượng = để đối tượng mới được tạo ra tạm thời bằng một tuyên bố sử dụng nếu bạn có thể làm cho nó kế thừa từ system.idisposable hoặc nếu bạn chỉ cần thiết lập nó để null khi thực hiện? Tôi không biết mã cho nó ra khỏi đầu của tôi nhưng một cái gì đó như:

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; 

} 
Các vấn đề liên quan