WinForms カスタム プログレス バーを作成しましたが、少しちらつきます。ダブルバッファリングされていますが、まだ少しちらつきがあるので、WPF を試して、少しちらつきがなくなるかどうかを確認しています。
私はWPFにまったく慣れていません。私が読んだ限りでは、WPF の OnPaint(PaintEventArgs e) メソッドは OnRender(DrawingContext drawingContext) と呼ばれています。
System.Drawing.Image BMP = System.Drawing.Image.FromFile(MyImagePath);
BMP = new Bitmap(BMP, (int)Width, (int)Height);
// Working method I founded in this site for converting a System.Drawing.Bitmap to a BitmapSource
ImageSource Rainbow = CreateBitmapSourceFromGdiBitmap((Bitmap)BMP);
// Working method I founded in this site for converting a System.Drawing.Bitmap to System.Windows.Media.Brush
System.Windows.Media.Brush RainbowBrush = CreateBrushFromBitmap((Bitmap)BMP);
protected override void OnRender(DrawingContext DrawingContext)
{
if (Value > 0)
{
Rect myRect = new Rect(0, 0, ((Width * Value) / (Maximum - Minimum)) + 5, Height);
DrawingContext.DrawRectangle(RainbowBrush, new System.Windows.Media.Pen(), myRect);
}
}
問題:
私のイメージは緑色のバーを「上書き」していません。ここで、Rect myRect = new Rect(0, 0, ((Width * Value) / (Maximum - Minimum)) + 5, Height);
... に変更するとRect myRect = new Rect(0, 50, ((Width * Value) / (Maximum - Minimum)) + 5, Height);
、結果は次のようになります。
そのため、レインボー バーは描画されますが、プログレス バーの上には描画されません。私が書いた場合Rect myRect = new Rect(0, 0, ((Width * Value) / (Maximum - Minimum)) + 5, Height);
、それは描画されますが、プログレスバーの下にあります。レインボー プログレス バー (およびその他のカスタム プログレス バー) を表示するにはどうすればよいですか?
ご協力ありがとうございました。
編集:元のプログレスバー(少しちらつくもの)には、虹以上のものがあります。レインボーから始めて、WPF で簡単なテストを行い、他のものを追加してみました。なぜこのような単純なプログレス バーが WinForms で点滅していたのか疑問に思っている場合に備えて。それは、WinForms の方が虹以上のものを持っていたからです。ありがとうございました。