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();
}
}
これは既知の問題であり、そのためのいくつかの簡単な回避策、または他のいくつかの解決策はありますか?
すばやく対応していただきありがとうございます。なぜ2つの更新がレンダリングプロセスを混乱させるのか分かりませんが、これは誰かに何か問題を救うことを願っています。 –