iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
自我挑戰組

自我挑戰雜記系列 第 16

進度環應用實作

  • 分享至 

  • xImage
  •  

剛開始學C#跟XAML時,主管為了讓我不要整天打瞌睡,就交代了我把已經做好的介面翻新。
我原本以為簡簡單單的調整一下排版就好,
結果我主管看著公司內部自用程式的儀表盤跟我說:這個好醜,你去弄個新的。
https://ithelp.ithome.com.tw/upload/images/20230922/20151710IGEdSGkmX9.png

這邊非常感謝茂伯譙程式的教學文,讓我能參考並順利完成任務,下面附上來源,有興趣的可以看看。
進度環參考來源

這邊直接導入了進度環(3)的範例程式,並將其修改:
在XAML的Window先引入範例的ProgressCircleLibrary

xmlns:sp="clr-namespace:ProgressCircleLibrary;assembly=ProgressCircleLibrary"

在需要的地方將展示用的程式碼嵌入

<StackPanel Orientation="Vertical" >
    <p:ProgressCircle Percent="{Binding Percent}" Stroke="Brown" StrokeThickness="10" 
                      Width="100" Height="100" Background="AliceBlue"
                      Content="{Binding Percent}"/>
    <Button Margin="12" Content="Test" Command="{Binding TestProgress}"/>
    <Button Margin="12" Content="Rest" Command="{Binding Reset}"/>
</StackPanel>

將Binding的Percent改成需要的資料來源

 public double Percent
{
    get => percent = SpeedPerHour*100/50;
    set => SetProperty(ref percent, value);
}

參考了一般的儀表盤,決定不要使用圓形,所以起始位置跟結束位置都要進行調整

再把漸變色LinearGradientBrush塞到p:ProgressCircle內

<sp:ProgressCircle.Stroke>
    <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
         <GradientStop Color="Red" Offset="0.0" />
         <GradientStop Color="Orange" Offset="0.4" />
         <GradientStop Color="Yellow" Offset="0.6" />
         <GradientStop Color="Green" Offset="0.8" />
    </LinearGradientBrush>
</sp:ProgressCircle.Stroke>

再將下面這篇靜哥哥文章提到的刻度縫合上去
刻度參考來源

private void DrawScale()
{
    for (int i = -35; i <= 215; i += 5)
    {
        //添加刻度线
        Line lineScale = new Line();
        //外150 內134

        if ((i + 35) % 25 == 0)
        {                    
            lineScale.X1 = 250 - 115 * Math.Cos(i * Math.PI / 180);
            lineScale.Y1 = 150 - 115 * Math.Sin(i * Math.PI / 180);
            lineScale.Stroke = new SolidColorBrush(Color.FromRgb(0xFF, 0xFF, 0xFF));
            lineScale.StrokeThickness = 4;
            lineScale.X2 = 250 - 150 * Math.Cos(i * Math.PI / 180);
            lineScale.Y2 = 150 - 150 * Math.Sin(i * Math.PI / 180);
        }
        else
        {
            lineScale.X1 = 250 - 130 * Math.Cos(i * Math.PI / 180);
            lineScale.Y1 = 150 - 130 * Math.Sin(i * Math.PI / 180);
            lineScale.Stroke = new SolidColorBrush(Color.FromRgb(0xFF, 0xFF, 0xFF));
            lineScale.StrokeThickness = 2;
            lineScale.X2 = 250 - 150 * Math.Cos(i * Math.PI / 180);
            lineScale.Y2 = 150 - 150 * Math.Sin(i * Math.PI / 180);
        }
        this.gaugeCanvas.Children.Add(lineScale);
    }
}

最後就這長這樣
https://ithelp.ithome.com.tw/upload/images/20230922/201517108g2ZWL5Wdb.jpg

今天有聚餐,這篇文章還沒整理好


上一篇
物件導向簡
下一篇
實作COM Port自動連線功能
系列文
自我挑戰雜記18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言