2011-10-29 3 views
0

here에 대한 접근 방식을 따르면 내 애플리케이션의 맞춤형 라이브 타일 모양이 생성됩니다.이미지 파일에 "사용자 컨트롤"렌더링

이 접근 방식의 유일한 문제점은 C# 코드를 통해 프로그래밍 방식으로 컨트롤 집합 전체를 작성해야한다는 것입니다.

내 응용 프로그램 (LiveTile.xaml)에 사용자 정의 컨트롤을 추가하고 모든 사각형과 TextBlock을 추가하는 대신이 시간에 동일한 방법을 사용하여 UserControl을 인스턴스화하고 비트 맵에 렌더링했습니다.

var tileUserControl = new MyLiveTile(); // this internally has a simple 50x50 red grid 
bitmap.Render(tileUserControl, new TranslateTransform()); 

하지만 더 이상 비트 맵 이미지에 렌더링 된 것이 없습니다. 이미지는 완전히 검은 색으로 남아 있습니다 (아주 아주 간단한 xaml이 사용자 정의 컨트롤 안에 있음).

누구에게 어떻게 달성 할 수 있는지 알고 있습니까? 나는 또한

  • 이 .UpdateLayout() .Measure를 호출
  • ()를 호출하려고 무엇

    ;

  • 전화 .Arrange();
  • 전화 .InvalidateMeasure();
  • 전화 .InvalidateArrange();

아무 것도 출력에 영향을 미치지 않는 것 같습니다.

감사합니다.

답변

2

전체 렌더링 루틴을 게시 하시겠습니까? 최소한 bitmap.Invalidate()으로 전화해야합니다.

또한 UserControl의 모든 FrameworkElements가 실제로로드되고 렌더링되도록하려면 Control.Loaded 이벤트가 발생할 때까지 기다려야 할 수 있습니다. 그것의 어떤없이 초기 그냥 UserControl을 요소 자체를 렌더링 할 수있는 UserControl을 렌더링

, 어린이 (즉. 검은 색 사각형)

+0

완벽한 생각입니다. (이미 invalidate() 호출이 있습니다.) .Loaded가 실행되지 않았습니다. 어쩌면 비주얼 트리에 먼저 추가해야 할 것입니다. 왜 그런지 알고 있니? –

+0

아니요, 정확히 같은 문제가 있다는 것을 막연하게 기억합니다 :-) –

0

필자도이 문제를 가졌이다. Backgroud 에이전트를 사용하여 라이브 타일을 업데이트하는 경우 컨트롤이 내용을로드하거나 중첩하거나 정렬하거나 렌더링 할 수 있는지 확실하지 않습니다.

로드 이벤트가 발생할 때까지 기다렸다가 컨트롤을 다시 렌더링하려고 시도합니다.

+0

Control.Loaded가 실행될 때 eventHandler를 사용했지만 결코 발생하지 않았습니다. 나는 전경과 배경 모드에서 시도했다. 컨트롤은 항상 검은 색 사각형을 렌더링합니다. –

관련 문제