2009-08-24 6 views
0

현재 페인트와 비슷한 WPF 응용 프로그램의 클래스를 만들려고합니다. LineMovement 클래스 (StartPoint에서 EndPoint까지의 라인)와 PathMovement 클래스 (PointCollection 타입의 프로퍼티 포인트에 지정된 모든 포인트를 통과하는 라인)를 기반으로해야합니다. 이 클래스는 Control에서 상속 받고 ControlTemplate을 통해 모양을 얻습니다.WPF 컨트롤의 다시 그리기 강제 적용

ControlTemplate은 특정 라인의 모든 이동 가능 포인트에 대한 약간의 시각적 인 마커가 포함 된 이동 객체의 AdornerLayer에 Adorner를 추가합니다. 이 마커는 마우스로 끌기를 지원합니다.

문제는 내 이동 클래스가 포인트가 이동 될 때 다시 채색되지 않는다는 것입니다. 나는 Mole을 사용하여 코드를 디버깅했으며 라인을 시각화하는 데 사용 된 Polyline이 변경된 포인트 값 (Point 속성에 표시됨)을 얻음을 알았지 만 다시 그리지 않았습니다.

WPF 컨트롤의 다시 그리기를 강제로 수행 할 수 있습니까? 속성 변경, WPF는이

답변

1

TemplateBinding은 양방향 데이터 바인딩 (즉, Polyline의 새 값으로 Points 컬렉션 업데이트)을 지원하지 않습니다. 그것은 제어 템플릿에 사용하기 위해 단방향 데이터 바인딩에만 사용됩니다. Bea Stollnitz의 블로그 항목 : http://bea.stollnitz.com/blog/?p=38

0

는 드프가 AffectsArrange 메타 데이터 속성 (http://msdn.microsoft.com/en-us/library/system.windows.frameworkpropertymetadataoptions.aspx)가 '객체.

폴리 라인 포인트를 {TemplateBinding Points}만큼 바인딩 할 때 {Binding RelativeSource = {RelativeSource TemplatedParent}}와 바인딩 할 때 완벽하게 작동합니다.

나 혼자만의주의 :이 멍청한 TemplateBinding을 다시 사용하지 마십시오.

+0

이미 시도해 보았습니다. 여전히 도움이되지 않습니다. ( 정말 이상한 점은, 몹을 사용하여 그 지점 컬렉션이 변경된 지점을 보여 주지만 다시 그려지지 않은 동작을 나타내는 폴리 라인을 살펴볼 때 곰팡이를 사용할 때입니다. 편집 "(일명 변경없이 문자열을 가져 와서"저장 "버튼을 누릅니다) 폴리 라인의 PointsCollection을 다시 그려야합니다. – chrischu

1

이 TemplateBinding 순수한 악이라고 밝혀 다시 그려야하는지 알 방법 - 당신은 당신의 운동을해야

관련 문제