내 시나리오는 다음과 같습니다. 내 아들을위한 약간의 수학 퀴즈 응용 프로그램을 만들고 각 질문에 답한 후 내 캔버스의 배경 ImageBrush를 동적으로 변경하려고했습니다. 내 이미지 (pngs)를 리소스 파일에 삽입하고 배열에로드 한 다음 무작위로 하나를 선택하여 캔버스에로드하는 것으로 생각했습니다.런타임 중에 WPF에서 Canvas의 배경을 변경하려면 어떻게해야합니까?
내가 처음 만난 문제는 리소스 파일에서 이미지가 비트 맵으로 저장된다는 사실이었습니다. 일부는 인터넷에서 둘러보고 난 후에 나는 마침내 그 다음 도우미 메서드 사용하여 객체를 BitmapImage하는 비트 맵 변환하는 방법을 알아 냈 : 나는 BitmapImage에서 ImageBrush와를 만들어 거기에서
private BitmapImage FromResourceBitmap(Bitmap bitmap)
{
var result = new BitmapImage();
using(var stream = new MemoryStream())
{
bitmap.Save(stream, ImageFormat.Png);
stream.Position = 0;
result.BeginInit();
result.StreamSource = stream;
result.EndInit();
}
return result;
}
을하고 배경에 할당 캔버스의 속성 :
var brush = new ImageBrush {ImageSource = m_Media.Screens[0]}; // m_Media.Screens[x] returns a BitmapImage...obviously.
QuestionCanvas.Background = brush;
불행히도, 이것은 작동하지 않는 것 같습니다. 응용 프로그램이 실행될 때 배경은 순수한 흰색입니다. 내 XAML은 배경을 설명하지 않고 ... 잘 혼란 스럽습니다. 어떤 도움이라도 대단히 감사하겠습니다! 고맙습니다!
백그라운드 속성을 변경 한 후에 창 크기를 조정하려고하면 어떻게됩니까? 내 직감은 그것이 새로 고침 문제라고합니다. 그 외에는 그 방법에 문제가있을 수 있습니다. 정적 리소스를 먼저 사용하도록 설정하십시오. 단단한 경우 메서드에서 직접 시도하고 수행 할 수 있습니까? – keyle
그것이 내가 원래 생각한 것입니다. 어떤 "무효화"메서드를 호출하여 다시 그리기를 시도했지만 아무 일도 없었습니다. 크기 조정, 최소화, 최대화 등은 아무 것도하지 않았습니다. 그러나, 나는 그것을 밖으로 생각하고 몇 분 안에 답변을 게시 할 것입니다. – Mateo