C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

WPF 描写したLineが透ける

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■95478 / inTopicNo.1)  WPF 描写したLineが透ける
  
□投稿者/ つらむ (1回)-(2020/08/05(Wed) 20:48:45)

分類:[C#] 

お世話になっております。
WPF VS2019です。

以下のコードで、画面を上から黒く塗りつぶすことをしたいと思っています。

        private void Event()
        {
            for (int i = 0; i < this.Height; i++)
            {
                var l1 = new Line();
                l1.X1 = 0;
                l1.X2 = this.Width;
                l1.Y1 = l1.Y2 = i;
                l1.Stroke = System.Windows.Media.Brushes.Black;
                l1.Opacity = 1.0;
                l1.StrokeThickness = 0.5;
                l1.SnapsToDevicePixels = true;
                this.canvasMain.Children.Add(l1);
                DoEvents();
                Thread.Sleep(5);
            }
        }

すると以下画像のように、描写した線が半透明になります。
https://i.gyazo.com/c66cbee1208c553e5a1bdb99c8d6ec65.png

原因は何が考えられるでしょうか?

閲覧頂きありがとうございます。

引用返信 編集キー/
■95480 / inTopicNo.2)  Re[1]: WPF 描写したLineが透ける
□投稿者/ Hongliang (1074回)-(2020/08/06(Thu) 09:23:17)
2020/08/06(Thu) 09:23:42 編集(投稿者)
StrokeThicknessのせいですが、申し訳ないことに勉強不足なため具体的な説明はできません。

単に塗りつぶすだけなら、Lineをたくさん並べるのではなく、System.Windows.Shapes.Rectangleを
1つ配置して、それのHeightを徐々に増やしていくほうがいいでしょう。

あと、DoEventsではなくてasync/awaitを使うことをお勧めします。

async Task Event() {
    var rect = new Rectangle();
    rect.Width = canvas.ActualWidth;
    rect.Height = 0;
    rect.Fill = Brushes.Black;
    canvas.Children.Add(rect);
    for (double i = 0; i < canvas.ActualHeight; i++) {
        rect.Height = i;
        await Task.Delay(5);
    }
}

// XAMLならStoryboardでアニメーションさせる方法もあるけど、
// 長いこと書いてないので書き方を忘れた…。

引用返信 編集キー/
■95484 / inTopicNo.3)  Re[2]: WPF 描写したLineが透ける
□投稿者/ つらむ (2回)-(2020/08/06(Thu) 18:40:27)
お世話になっております。

ソースを参考にして黒く塗りつぶすことが出来ました。

ありがとうございました。
StrokeThicknessのせいだったのですね・・・

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ