2010-03-08 4 views
4

WPF 차트를 작성하고 Visuals를 사용하여 성능을 향상시킵니다.WPF 컨트롤 (ComboBox)을 캔버스에 시각적으로 넣기

public class DrawingCanvas2 : Canvas 
{ 
    private List<Visual> _visuals = new List<Visual>(); 

    protected override Visual GetVisualChild(int index) { return _visuals[index]; } 
    protected override int VisualChildrenCount { get { return _visuals.Count; } } 

    public void AddVisual(Visual visual) 
    { 
     _visuals.Add(visual); 

     base.AddVisualChild(visual); 
     base.AddLogicalChild(visual); 
    } 
} 

DrawingVisual 옆 요소 (선, 텍스트) 나는 차트에서 ComboBox 필요합니다 코드는 것 같습니다. 그래서 나는이 시도 :

public DrawingCanvas2() 
    { 
     ComboBox box = new ComboBox(); 
     AddVisual(box); 

     box.Width = 100; 
     box.Height = 30; 

     Canvas.SetLeft(box, 10); 
     Canvas.SetTop(box, 10); 
    } 

을하지만이 작동하지 않습니다 표시되지 콤보가 없다. 내가 누락 된 것?

+0

Silverlight 차트 Toolkit 컨트롤이 제공하지 않는 차트 컨트롤이 있습니까? – AnthonyWJones

+0

BTW는이 WPF입니까, Silverlight입니까? – AnthonyWJones

+0

WPF (Silverlight에서 기능이 동일하다고 가정). – Mikhail

답변

0

정답은 Linda Liu, Microsoft WPF forum에 의해 인 UIElementCollection이다.

코드는 다음과 같습니다

public DrawingCanvas2() : base() 
    { 
     ComboBox box = new ComboBox(); 
     AddVisual(box); 

     Size outputSize = new Size(100, 20); 

     box.Measure(outputSize); 
     box.Arrange(new Rect(outputSize)); 
     box.UpdateLayout(); 

     box.Items.Add("hello1"); 
     box.Items.Add("hello2"); 
     box.Items.Add("hello3"); 

     box.SelectedIndex = 1; 
    } 

box.SelectedIndex이 명시 적으로 다른 상자에 항목이 없습니다 - 선택 가능한 있으며,하지 -1로 설정해야합니다 것이 중요합니다.

1

ComboBox를 DrawingCanvas2와 함께 컨테이너 패널 내부에 배치하고 DrawingCanvas2 상단에 z- 순서로 배치하는 것을 고려 했습니까?

그런 식으로 DrawingCanvas2는 그림 그리기에 집중할 수 있으며 ComboBox는 바로 사용 가능합니다.

+0

재미있는 접근 방법, 그것은 작동합니다, 나는'Canvas' 안에'DrawingCanvas2'와'ComboBox'를 둘 것입니다. – Mikhail

1

Canvas는 MeasureOverride 및 ArrangeOverride를 사용하여 Children 속성에서 크기를 "가져옵니다". AddVisualChild를 호출하기 때문에 Children 속성에 추가되지 않고 여전히 비어 있다고 생각합니다. XIU는 듯했으나 있지만

어린이 속성은 (콤보 상자가 UIElement에있다)