1

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 の方が虹以上のものを持っていたからです。ありがとうございました。

4

1 に答える 1

0

ProgressBarアプリケーションの開始時にWindowを作成する必要がある場合は、次のWPFコードを使用して行うことができます。

あなたのxaml:

<Window x:Class="PasswordBoxMVVM.MainWindow"
    <!--The code omitted for the brevity-->
    Title="MainWindow" Height="350" Width="525">       
    <StackPanel x:Name="stackPanel">
       <TextBox x:Name="textBox"
       <DataGrid />
    </StackPanel>
</Window>

コード ビハインド:

public MainWindow()
{
   InitializeComponent();    
   PaintProgressBar();
}

private void PaintProgressBar()
{            
   ProgressBar progressBar = new ProgressBar();
   progressBar.IsIndeterminate = true;
   progressBar.Margin = new Thickness(10, 0, 10, 10);
   progressBar.Visibility = Visibility.Visible;
   progressBar.Height = 25;
   //progressBar.FlowDirection = FlowDirection.LeftToRight;
   progressBar.Foreground = System.Windows.Media.Brushes.Green;
   progressBar.Background = System.Windows.Media.Brushes.Red;
   progressBar.Value = 50;
   stackPanel.Children.Add(progressBar);
}

プロパティprogressBar.Foregroundがあなたの色を設定する場所ProgressBar

于 2015-11-25T07:56:28.980 に答える