2016-09-05 7 views
4

DrawingImageUIElementcreating a visualizer 사소한 동안, 내 비주얼 항상 대상 객체 유형 (DrawingImage이며 UIElement가) 이 같은 직렬화 표시되지 않도록 예외를 발생 등 일부 WPF 요소에 대한 비주얼을 만들려고 .비주얼 WPF 요소

추가 읽기에서 사용자 지정 직렬화를 제공하기 위해 VisualizerObjectSource을 구현해야한다고 밝혀졌습니다. 이 클래스는 DebuggerVisualizer 속성의 인수 중 하나로 지정됩니다. 나는이 단계를 따라 갔고 이제는 내 사용자 정의 시리얼 라이저가 호출되지만, 실제로 거기에서 무엇을 해야할지 모르겠습니다. 여기에 호출되는 관련 기능은 다음과 같습니다

public override void GetData(object target, Stream outgoingData) 
{ 
    var writer = new StreamWriter(outgoingData); 
    writer.WriteLine(/*???*/); 
    writer.Flush(); 
} 

가 나는 UIElement 또는 DrawingImage에 쓰기 어떻게 내게합니다 (UIElement의 바이너리 직렬화 된 버전?) 기대 정확히 정확히 이해하지 마십시오 출력 스트림. 누구든지 전에 이것을 했습니까?

답변

2

마침내 그것을 통해 내 길을 관리했습니다. 그것은 내가 생각했던 것보다 훨씬 더 간단합니다. 자신의 길을 찾으려고하는 다른 사람은 다음과 같이 작동합니다.

먼저 GetData() 무시 (질문 읽기)는 귀하가 관리해야합니다. 비주얼 라이저로 보내려는 내용을 결정해야합니다. Show() 호출에서 개체를 다시 구성 할 수 있도록 충분한 정보를 보내십시오.

WPF 요소의 경우 직렬화는 내가 생각했던 것보다 훨씬 간단하다는 것이 입증되었습니다. WPF 객체의 직렬화/비 직렬화를 수행하는 데 사용할 수있는 XamlReaderXamlWriter 클래스가 내장되어 있습니다.

Show()에 개체를 재구성 한 후에는 단순히 Form에 표시해야합니다. Visual Studio에서는 WPF Window이 아닌 기존의 FormControl 클래스 만 지원하지만 WPF는 ElementHost을 폼이나 컨트롤에 배치 한 다음 재구성 된 WPF 객체를이 자식으로 할당하여이 문제를 해결할 수 있습니다. ElementHost.

ElementHost과 재구성 된 개체 사이에 ViewBox 레이어를 추가하여 사용 가능한 공간에 우아하게 맞출 수 있습니다.

관심있는 사람을 위해 WPFVisualizers project on GitHub을 업로드했습니다. 현재 DrawingImageUIElement 유형의 두 가지 시각화 도우미가 포함되어 있습니다. 함께 WPF 세계의 시각적 요소의 대부분을 커버하지만, 필요한 경우 더 많은 유형을 추가 할 수 있습니다. 프로젝트에는 모든 시각화 프로그램 직렬화/통신 논리를 포함하는 VisualizerBase 클래스가 들어 있습니다. 이것은 다음과 같이 코드 한 줄을 쓰기로 간단하게 새로운 WPF의 비주얼을 만들 수 있습니다 : 그것 뿐이다

public class GeometryDrawingVisualizer : VisualizerBase<GeometryDrawing, GeometryDrawingControl> 
{ 
} 

합니다. GeometryDrawing 유형의 새 시각화 도우미를 만들었습니다. 위의 예제에서 두 번째 일반 매개 변수 (위의 예에서 GeometryDrawingControl)는 비주얼 라이저의 UI를 구성하는 WinForms Control (또는 원하는 경우 Form)입니다. ElementHost을 컨트롤에 배치하고 유형을 렌더링해야하는 것을 넣으십시오.

+0

유망 해 보인다. 좋은 BTW. – Mrgn