2015-12-15 50 views
0

我有一個RenderChart方法encaspsulated在UserControl後面的代碼,這將有望在地圖上繪製一些圖表。我簡單的方法,試圖得到一些文本渲染,但沒有成功:簡單的DrawingContext不繪製到UI

private void RenderChart() 
    { 
     DrawingVisual newVisual = new DrawingVisual(); 

     using (DrawingContext dc = newVisual.RenderOpen()) 
     { 
      Rect rect = new Rect(new Point(160, 100), new System.Windows.Size(320, 80)); 

       dc.DrawRectangle(Brushes.Maroon, (Pen)null, rect); 
       dc.Close();   
     } 

     if (this.visual != null) 
     { 
      this.RemoveVisualChild(this.visual); 
     }    

     this.AddVisualChild(newVisual); 
     this.visual = newVisual; 

     this.RefreshMargin(); 
    } 

每當我畫簡單的形狀等我使用例如myCanvas.Children.Add(myEllipse);

逸岸之前,如果我定義了一個橢圓&像上面那樣將其添加到畫布上,而不使用DrawingContext我得到我期望的結果。

我是否需要將繪圖上下文添加到我的控件中的面板,還是有其他一些原因,爲什麼不會在UI中呈現?

+1

而不是創建一個新的DrawingVisual,您可能會重寫UserControl的OnRender方法。 – Clemens

+0

編輯問題代碼。這個類是從FrameworkElement繼承的UserControl,所以不知道爲什麼我沒有獲得UI輸出。我將這個newVisual添加爲VisualChild ... – Hardgraf

回答

1

UserControl類最終從一個叫UIElement類,它定義了一個虛擬OnRender方法,其可以覆蓋在控制「畫」(如克萊門表明在一個問題評語)派生的。下面的例子將繪製一個藍色矩形大小相同的用戶控件:

protected override void OnRender(DrawingContext dc) 
{ 
    dc.DrawRectangle(Brushes.Blue, null, new Rect(0, 0, ActualWidth, ActualHeight)); 
} 

我建議重寫OnRender是接近這個,而不是嘗試使用DrawingVisual的更傳統的方式。使用此技術可能會遇到的唯一潛在問題是,您的圖形將顯示後面的用戶控件中包含的所有其他控件。