2012-03-08 4 views
1

Microsoft Visio 드로잉을 Silverlight 콘텐트가 포함 된 웹 사이트로 내보낼 수 있습니다. 이 내용은 blog-post에 설명되어 있습니다.Silverlight 응용 프로그램에 Visio 내 보낸 XAML 통합

이러한 수출의 출력은 다음과 같다 :

  • xaml_1.xaml는
  • 인 data.xml (예컨대 레이블 모든 텍스트 콘텐츠를 포함 등) (제어부의 구성을 포함)
  • 여러 자바 스크립트는
  • 다른 파일과 같은 * .CSS 같은 실버 컨테이너 * .HTM 페이지와 이미지
을 파일

내 보낸 XAML 코드를 다른 기존 Silverlight 응용 프로그램에 통합하고 싶습니다. 런타임 중에 XAML 코드를 동적으로로드하는 방법을 알려주는 blog-post을 발견했습니다.

내가 알고 싶은 것은 XAML 파일과 data.xml을 "병합"하는 방법과 특정 텍스트를 변경하기 위해 XAML 코드 항목에 대한 참조를 가져 오는 방법입니다.

답변

0

생성 된 XAML을 약간 조정해야한다고 생각합니다. 불행히도 Visio는 모든 단일 문자에 대한 글리프를 생성합니다. 런타임에 텍스트를 변경하려면이 글리프를 제거하고 필요한 컨트롤 (예 : TextBlock)을 직접 추가해야합니다.

Silverlight에 XamlReader.Load를 사용하여 XAML을로드 할 수 있습니다. 여기에서 찾을 수있는 좋은 설명 : http://blogs.silverlight.net/blogs/msnow/archive/2008/10/09/silverlight-tip-of-the-day-60-how-to-load-a-control-straight-from-xaml.aspx.

당신이 무시할 수있는 모든 JavaScript 및 HTML 파일, 귀하의 컨트롤을 식별하는 데 필요한 XML 파일. XML의 ID는 XAML 파일의 해당 요소를 참조합니다.

+1

기본적으로 요소의 ID를 얻기 위해 XML 파일을 구문 분석해야합니다. 여기서 요소를 삽입해야합니다 (예 :TextBlock)? – froeschli

1

관련 xaml js 파일 (예 : xaml_1.js)에는 (XAML) 'name'문자열에서 모양 ID를 읽고 frameset.js에서 OnShapeClick을 호출하는 handleMouseUp 함수가 있습니다. 모든 js 기반 웹 저장 출력 유형에 공통된이 메서드는 다른 메서드를 호출하여 details 테이블을 채우거나 data.xml에있는 하이퍼 링크를 검색합니다. frameset.js에서 FindShapeXML 함수를 살펴보면 페이지 ID와 쉐이프 ID (모양 ID는 Visio 자체의 고유 한 페이지 ID 임)를 기반으로 적절한 데이터를 얻음을 알 수 있습니다.

데이터 바인딩 또는 동적 모양 텍스트를 만드는 관점에서 글리프 문제 해결 방법 중 하나는 @slfan 하이라이트가 텍스트가 출력되지 않도록하는 것입니다. 예를 들어, Visio에서 Save As Web을 실행하기 전에 모든 도형을 반복하고 해당 HideText ShapeSheet 셀을 true로 설정할 수 있습니다. 이렇게하면 모든 글리프 xaml이 생성되지 않으며 data.xml의 텍스트 문자열에 계속 액세스 할 수 있습니다. 올바른 글꼴 크기 조정의 이점을 얻지는 못했지만 시나리오에 따라 다릅니다. 스케일을 바로 잡는 것이 정말로 중요하다면, 글리프 엘리먼트의 RenderTransform 애트리뷰트 (애트리뷰트 엘리먼트 신택스보다는 애트리뷰트 신택스로 기술되어있다)를 파싱 할 수있다.

Visio가 Visio에서 어떻게 작동하는지 미러링하기 때문에 글리프가 있습니다 (셰이프의 텍스트 내에서 개별 문자를 선택하고 다른 글꼴과 서식을 적용 할 수 있지만 필요없는 경우, 글리프 모음을 도랑에 유혹하고 @slfan에서 제시하는대로 TextBlock을 사용합니다.