2016-05-11 4 views
0

私はC#で作図するためのフレームワークを用意しています。私はいつか塗りつぶしを失い、TranslateTransformを使用した図形が塗りつぶされない場合があります。

私はそのRenderOpenを使用してDrawingVisual上で手動Geometryを描くときは、その後、TranslateTransformを使用して、それを移動:最近、私は何かをやろうとしていると、次の問題が注目されてきました。

何が起こるかを確認するには、ウィンドウに次のフレームワークの要素を挿入し、それを実行することができます。

class MyVisual : FrameworkElement { 
     private readonly DrawingVisual _visual = new DrawingVisual(); 
     private readonly Geometry _geom; 
     private readonly Random _r = new Random(); 

     public MyVisual() 
     { 
      AddVisualChild(_visual); 

      _geom = Geometry.Parse("M 95 100 L 130 130 95 160 Z").Clone(); 
      _geom.Transform = new TranslateTransform(); 

      UpdateVisual(); 
     } 

     public void MoveGeom() { 
      var transform = _geom.Transform as TranslateTransform; 

      var x = _r.Next(-60, 200); 
      var y = _r.Next(-60, 200); 
      transform.X = x; 
      transform.Y = y; 
     } 

     void UpdateVisual() 
     { 
      using (var dc = _visual.RenderOpen()) 
      { 
       UpdateVisual(dc); 
      } 
     } 

     private void UpdateVisual(DrawingContext dc) 
     { 
      var color = Brushes.Red; 
      var pen = new Pen(Brushes.Blue, 1); 

      dc.DrawGeometry(color, pen, _geom); 
     } 

     protected override int VisualChildrenCount => 1; 
     protected override Visual GetVisualChild(int index) => _visual; 
    } 
    public partial class MainWindow : Window 
    { 
     Timer _t = new Timer(500) { AutoReset = true }; 
     public MainWindow() 
     { 
      InitializeComponent(); 

      _t.Elapsed += (x, y) => Dispatcher.Invoke(() => _vis.MoveGeom()); 

      _t.Start(); 
     } 
    } 

これは既知の問題であり、そのためのいくつかの簡単な回避策、または他のいくつかの解決策はありますか?

答えて

1

このソリューションでは、この問題を解決するようだ:

public void MoveGeom() 
{ 
    var x = _r.Next(-60, 200); 
    var y = _r.Next(-60, 200); 

    _geom.Transform = new TranslateTransform(x, y); 
} 

は明らかに単一の座標を設定すると、2回の更新を引き起こし、レンダリング処理がどのような方法でそれで混乱しているので、2点の座標が個別に設定されている問題があります。

+0

すばやく対応していただきありがとうございます。なぜ2つの更新がレンダリングプロセスを混乱させるのか分かりませんが、これは誰かに何か問題を救うことを願っています。 –

関連する問題