2017-04-26 14 views
0

wpfAdorner와 ScrollViewer 내의 장식 요소를 일대일로 일치시키는 방법은 무엇입니까?

저는 ScrollViewer 내의 Grid 내에 컨트롤 A (inkcanvas)가 있습니다. Conrol A는 실제 창보다 크므로 ScrollViewer가 올바르게 수직 스크롤 막대를 추가하고 전체 컨트롤을 아래로 스크롤하여 볼 수 있습니다. 컨트롤 B (다른 잉크 캔버스)와 함께 Adorner를 연결하여 A를 제어 할 때 아래로 스크롤하면 Adorner가 화면 하단에 잘린 상태로 표시됩니다. 즉, Adorner는 장식 된 요소를 완전히 덮지 않고 있거나 스크롤 할 때 아래쪽으로 확장되지 않습니다.

Adorner (컨트롤)가 장식 된 요소를 완전히 덮고 ScrollViewer를 존중하게하려면 어떻게해야합니까? (Adorner 컨트롤의 픽셀과 ScrollViewer의 장식 요소 사이에 일대일 매칭이 필요합니다.)

TIA는

수정 # 1 : InkCanvas의 배경을 설정 Adorner의 주요 라인

_inkcanvas.Background CreateGrid =()이고; InkCanvas가 (상술 한 바와 같이)을 사용하는 경우

public InkCanvasTextAdorner(InkCanvas element) 
      : base(element) 
     { 
      _element = element; 

      _visuals = new VisualCollection(this); 
      _inkcanvas = new InkCanvas(); 

      _inkcanvas.Background = CreateGrid(); 

      _visuals.Add(_inkcanvas); 

      AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(element); 
      adornerLayer.Add(this); 
     } 

Adorner의 배경는 하단에 클리핑된다. 그러나 adorner 컨트롤은 장식 된 요소의 맨 아래로 계속 이동합니다.

그러나 캔버스가 InkCanvas 대신 사용되는 경우 Adorner의 배경 인은 장식 된 요소의 맨 아래까지 확장됩니다.

무엇이 잘못 되었나요?

답변

0

InkCanvas가 아닌 반면 Canvas가 Panel에서 상속하기 때문에 InkCanvas가 아닌 Canvas를 사용하여 실제 화면을 확장하는 Background 속성의 차이가있을 수 있습니다. 캔버스 배경이 내가 필요한 것을 수행한다는 사실을 기반으로 캔버스는 그 아래 레이어의 이미지를 볼 수 있으며 InkCanvas가 획을 허용하는 선 그리드를 게시 할 수 있습니다. 모두가 잘 :)처럼 보이는

public InkCanvasTextAdorner(InkCanvas element) 
      : base(element) 
     { 
      _element = element; 

      // The VisualCollection has only one visual parent. I.e. InkCanvasTextAdorner is the parent to the VisualCollection. 
      // By overriding default rendering behavior of the VisualCollection, any kind of control and its children can be placed in the Adorner. 
      _visuals = new VisualCollection(this); 
      _inkcanvas = new InkCanvas(); 
      _inkcanvas.Background = Brushes.Transparent; 

      _canvas = new Canvas(); 
      _canvas.Background = CreateGrid(); 

      _grid = new Grid(); 
      _grid.Children.Add(_canvas); 
      _grid.Children.Add(_inkcanvas); 

      // The _grid is a logical child of the VisualCollection of the Adorner. The ArrangeOverride and MeasureOverride will set up the Grid control. 
      _visuals.Add(_grid); // Adding a single control for display. 

      // AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(element); 
      AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(element); 
      adornerLayer.Add(this); 
     } 

: enter image description here