Silverlight 인쇄 사용 에 대한 자세 한 설명,마이크로소프트 버그 문제 인지 여부
5897 단어 Silverlight인쇄 하 다.
2:SLStudy 에 Silverlight 사용자 컨트롤 을 새로 만 듭 니 다.Print 1.xaml 는 인쇄 할 컨트롤 입 니 다.
Print 1.xaml 에 코드 를 추가 합 니 다
<Grid x:Name="LayoutRoot" Background="White">
<Button> , </Button>
</Grid>
3:인쇄 할 내용 이 만 들 어 졌 습 니 다.여기 인쇄 할 단 추 는 단추 입 니 다.4:MainPage.xaml 코드 를 다음 과 같이 수정 합 니 다.
SL4 에서 인쇄 기능 을 제공 하 는 것 은 PrintDocument 류 이기 때문에 먼저 이러한 대상 을 예화 합 니 다.
이어서 PrintPage 이 벤트 를 등록 하면 PrintPage 이 벤트 는 인쇄 할 때 실 행 됩 니 다.
그리고 printDocument 의 Print 방법 을 사용 하여 인쇄 합 니 다.
PrintDocument 의 PrintPage 이벤트 에서 PrintPageEventArgs 는 인쇄 된 인자 입 니 다.
현재 프린터 의 정 보 를 얻 을 수 있 습 니 다.
여기에 PageVisual,즉 인쇄 할 대상 을 설정 하면 됩 니 다.
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel>
<Button x:Name="btnPrint1" Click="btnPrint1_Click">Print1</Button>
</StackPanel>
</Grid>
모두 작성 한 후에 프로그램 을 실행 하고 Print 1 을 클릭 하여 인쇄 창 을 팝 업 할 수 있 습 니 다.인쇄 효 과 는 다음 그림 과 같 습 니 다:물론 우리 의 인쇄 수 요 는 이렇게 간단 할 수 없고 인쇄 1 의 내용 을 설정 해 야 할 지도 모른다.만약 에 우리 가 단추 에 표 시 된 글 자 를 수정 하려 고 한다 면 우 리 는 이렇게 할 수 있다
private void btnPrint1_Click(object sender, RoutedEventArgs e)
{
PrintDocument printDocument = new PrintDocument();
printDocument.PrintPage += new EventHandler<PrintPageEventArgs>(printDocument_PrintPage);
PrintDocument.Print(" , ");
}
void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
e.PageVisual = new Print1();
}
PrintPageEventArgs 매개 변 수 를 설정 한 PageVisual 대상 을 통 해 우 리 는 그 페이지 를 인쇄 하 는 기능 을 실현 할 수 있다.여기 서 제 가 정리 하 겠 습 니 다.
1:인쇄 할 내용 을 확인 하고 UserControl 을 새로 만들어 인쇄 한 내용 을 표시 합 니 다.
2:새 PrintDocument 대상,PrintPage 이벤트 등록,Print 방법 호출.
3:PrintPage 이벤트 에서 인쇄 할 대상 을 구성 한 다음 데이터베이스 에 데 이 터 를 가 져 온 다음 에 데 이 터 를 컨트롤 에 연결 한 다음 에 데 이 터 를 연 결 된 컨트롤 을 PrintPageEventArgs 의 PageVisual 대상 에 할당 합 니 다.
질문
인쇄 할 것 이 한 장 밖 에 없다 면 이 방법 으로 충분 할 것 입 니 다.하지만 한 문 서 를 여러 장 인쇄 해 야 할 때 가 있 습 니 다.
예 를 들 어 위의 단 추 를 5 장 인쇄 하면 어떻게 해 야 합 니까?
우리 위 에 PrintPageEventArgs 의 HasMore Pages 인 자 를 기억 하 십 니까?
PrintPage 이벤트 가 실 행 된 후 기본 HasMore Pages 는 false 입 니 다.HasMore Pages 를 true 로 설정 하면 PrintPage 이벤트 가 계속 실 행 될 수 있 습 니 다.HasMore Pages 속성 이 true 이면 PrintPage 사건 은 HasMore Pages 가 false 일 때 까지 여러 번 발생 합 니 다.
위 에 있 는 단 추 를 5 장 인쇄 하려 면 HasMore Pages 를 true 로 4 번 설정 하고 마지막 으로 HasMore Pages 를 false 로 설정 하면 됩 니 다.
수 정 된 printDocumentPrintPage 방법 은 다음 과 같 습 니 다
void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
e.PageVisual = new Print1();
}
현재 인쇄 된 페이지 가 몇 페이지 인지 알 아야 할 때 가 있 습 니 다.printDocument.PrintePageCount 속성 을 조회 하여 얻 을 수 있 습 니 다.PrintDocument 에서PrintPage 방법 에서 sender 대상 은 사실 PrintDocument 대상 이기 때문에 강제로 형식 을 바 꿀 수 있 습 니 다.
만약 에 우리 가 위의 5 개의 Button 의 내용 을 모두 1,2,3,4,5 로 수정 하려 고 한다 면 우 리 는 코드 를 4,567913 으로 수정 할 수 있 습 니 다.실제로 우리 의 printCount 변 수 는 필요 하지 않 습 니 다.printDocument.Printed PageCount 를 직접 사용 하면 됩 니 다.구체 적 인 코드 는 독자 가 스스로 실현 할 수 있 습 니 다.
마이크로소프트 버그??
프린터 설정
그러면 인쇄 결 과 는*.xps 파일 이지 만 인쇄 과정 에서 알림 상자 가 나타 나 저장 주 소 를 물 어 봅 니 다.
PrintPage 이벤트 에 정지점 을 찍 으 면 저장 주 소 를 물 었 을 때 PrintPage 방법 이 실 행 된 것 을 볼 수 있 습 니 다.즉,PringPage 방법 은 두 번 실 행 됩 니 다.첫 번 째 는 제대로 인쇄 되 지 않 았 습 니 다.
예 를 들 면:
위의 그림 의 인터페이스 에서 취 소 를 클릭 하면 시스템 이 응답 을 잃 고 끊 길 수 있 습 니 다.
사용자 가 저장 을 누 르 면 PrintPage 이벤트 가 다시 실 행 됩 니 다.
그러나 이미 한 번 인쇄 되 었 기 때문에 여러 페이지 를 인쇄 할 때 문제 가 생 길 수 있다.
두 개의 표지 변 수 를 사용 하면 이 문 제 를 해결 할 수 있다.
예 를 들 어 코드 변경 은:
void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
Print1 printVisual = new Print1();
printVisual.btnSample.Content = " , ";
e.PageVisual = printVisual;
}
두 번 인쇄 하기 때문에 첫 번 째 는 초기 화,두 번 째 는 프린터 가 진정한 인쇄 를 시작 하 는 것 으로 여 겨 질 수 있 습 니 다.따라서 초기 화 인지 실제 인쇄 인지 두 변 수 를 사용 할 수 있 습 니 다.
첫 번 째 를 실행 할 때 printDocument.Printed PageCount==0,이때 isInitialized 를 true 로 설정 합 니 다.
두 번 째 실행 할 때,isInitialized==true 이기 때문에 realPrint 를 true 로 설정 할 수 있 습 니 다.
뒤의 코드 에 서 는 realPrint 를 true 로 판단 하면 됩 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Silverlight 2 시리즈 (20): Silverlight 에서 HTML DOM 과 어떻게 상호작용 하 는 지 (하)Silverlight 2 Beta 1 버 전 은 런 타임 이 든 Tools 든 프레임 워 크 언어 Visual Basic, Visual C \ #, IronRuby, Ironpython, JSON, Web Servi...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.