2013-01-09 3 views
1

단추의 배경을 이미지 원본으로 변경하려고합니다. 처음으로 표시 할 때 깜박이지 않도록 페이지로 이동하면 해당 이미지를 메모리에로드하려고합니다.깜박임없이 버튼의 배경을 설정하는 방법은 무엇입니까?

StreamResourceInfo resourceInfo = Application.GetResourceStream(uri); 
    BitmapImage bitmapSource = new BitmapImage(); 

    // Avoid flicker by not delay-loading. 
    bitmapSource.CreateOptions = BitmapCreateOptions.None; 

    bitmapSource.SetSource(resourceInfo.Stream); 

    imageSource = bitmapSource; 

내가 내 윈도우 8 스토어 앱에서 비슷한 시도 : 윈도우 폰에

, 나는 같은 이미지 소스를 만들 수 있었다

BitmapImage bitmapSource = new BitmapImage(); 
    bitmapSource.CreateOptions = BitmapCreateOptions.None; 
    bitmapSource.UriSource = uri; 
    imageSource = bitmapSource; 

을하지만 같은 문제가 발생합니다. 버튼에는 이미 배경과 다른 이미지가 있으며 특정 이벤트에서 새 배경으로 변경하고 싶습니다. 그러나 소스를 변경하면 눈에 띄는 깜박임이 발생합니다. 이미지가 메모리에 아직 저장되어 있지 않기 때문에 이미지 소스가 수정 된 두 번째 문제가 없어 졌다고 가정합니다.

누구나 해결책을 알고 계십니까? 어떻게 든이 이미지의 로딩을 강제해야합니다.

감사합니다.

답변

0

감사합니다 로스,하지만 그 대신에 내가했던 일은 리소스가 아니라면 위의 코드와 비슷한 코드를 사용하여 필요한 비트 맵을 6 개 정도 사전로드했습니다. 페이지를로드 할 때 비동기 적으로 수행 한 다음 버튼 배경에 ImageSource를 설정하면 이미 미리로드 된 비트 맵을 사용했습니다. 그렇게하면 비트 맵의 ​​인스턴스에 대해 새 메모리 덩어리를 할당하지 않는다는 것을 알 수 있습니다.

3

당신이 이미지 소스에 첨부하기 전에 BitmapImage에 SetSourceAsync 방법을 사용하고 기다리고 경우에 당신은 깜박임 볼 수 있어야합니다 -

// Ensure the stream is disposed once the image is loaded 
using (IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read)) 
{ 
    // Set the image source to the selected bitmap 
    BitmapImage bitmapImage = new BitmapImage(); 
    await bitmapImage.SetSourceAsync(fileStream); 
    imageSource = bitmapImage; 
} 

MSDN 문서는이

에 대한 좀 더 많은 정보를을
+1

감사합니다. 로스. 이것이 리소스 비트 맵에 대한 좋은 생각입니까? 나는 자원을 위해 제공되는 자동 비트 맵 캐싱을 우회 할 것이라고 염려한다. 특히 동일한 비트 맵을 사용하는 12 개의 버튼이있을 것이기 때문이다. – swinefeaster

관련 문제