C# WPF 進度條,根據讀取數據顯示進度條進度,根據Excel文件讀取數據,進度條樣式


后台代碼:

 //導入
        private void Border_MouseLeftButtonUp_2(object sender, MouseButtonEventArgs e)
        {
            var path = this.txtbox1.Text;
            if (path.Contains(".xlsx") || path.Contains(".xls"))
            {
                //顯示隱藏的彈框
                this.Tborders.Visibility = Visibility.Visible;
                var data1 = GetDataTable(path);
                List<ExcelModel> UList = new List<Model.ExcelModel>();

                int cout = data1.Rows.Count;
                probar1.Maximum = cout;
                probar1.Value = 0;

                UpdateProgressBarDelegate updatePbDelegate = new UpdateProgressBarDelegate(probar1.SetValue);
                for (int i = 0; i < cout; i++)
                {
                    UList.Add(new ExcelModel() { Code = data1.Rows[i][0].ToString(), DName = data1.Rows[i][1].ToString(), Name = data1.Rows[i][2].ToString(), Company = data1.Rows[i][3].ToString() });

                    Dispatcher.Invoke(updatePbDelegate, System.Windows.Threading.DispatcherPriority.Background, new object[] { System.Windows.Controls.ProgressBar.ValueProperty, Convert.ToDouble(i + 1) });

                    if (cout <= 100)
                    {
                        double db = Math.Ceiling(100.00 / cout);
                        var df = (db * cout) - 100;
                        this.lable1.Content = (((i + 1) * db) - df) + "%";
                    }
                    else if (cout > 100)
                    {
                        double db = 100.00 / cout;
                        if (Math.Floor(((cout - 1) * db) + 1) == 100)
                        {
                            this.lable1.Content = Math.Floor((i * db) + 1) + "%";
                        }
                        else if (Math.Ceiling(((cout - 1) * db) + 1) == 100)
                        {
                            this.lable1.Content = Math.Ceiling((i * db) + 1) + "%";
                        }
                    }

                    Thread.Sleep(10);

                }
                this.datagrid1.ItemsSource = UList;
                //beginImport(100, 0);
            }
            else
            {
                System.Windows.MessageBox.Show("請選擇Excel文件");
            }
        }
View Code

進度條后台主要代碼:

        #region 進度條
        private delegate void UpdateProgressBarDelegate(System.Windows.DependencyProperty dp, Object value);

        private void beginImport(double max, double v)
        {
            probar1.Maximum = max;
            probar1.Value = v;
            UpdateProgressBarDelegate updatePbDelegate = new UpdateProgressBarDelegate(probar1.SetValue);
            for (int i = 0; i < 100; i++)
            {
                Dispatcher.Invoke(updatePbDelegate, System.Windows.Threading.DispatcherPriority.Background, new object[] { System.Windows.Controls.ProgressBar.ValueProperty, Convert.ToDouble(i + 1) });
                this.lable1.Content = (i + 1) + "%";
                Thread.Sleep(10);
            }
        }
        #endregion

進度條XAML:

  <Border Width="302" Height="15" BorderThickness="1" BorderBrush="#999">
    <ProgressBar BorderThickness="0" x:Name="probar1" Width="302" Height="15" Background="#fff" Foreground="#199ED8" Style="{StaticResource SimpleProgressBar}">
    </ProgressBar>
  </Border>

樣式:

  <Window.Resources>
        <!--ProgressBar Style-->
        <Style TargetType="ProgressBar" x:Key="SimpleProgressBar">
            <Setter Property="IsTabStop" Value="False" />
            <Setter Property="SnapsToDevicePixels" Value="True" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ProgressBar">
                        <Grid x:Name="Root" >
                            <Border x:Name="PART_Track" Background="{TemplateBinding Background}" 
                                CornerRadius="2"
                                SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                            <Border  x:Name="PART_Indicator" HorizontalAlignment="Left" Background="{TemplateBinding Foreground}" 
                                CornerRadius="2"
                                SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="Orientation" Value="Vertical">
                                <Setter Property="LayoutTransform" TargetName="Root" >
                                    <Setter.Value>
                                        <RotateTransform Angle="-90" />
                                    </Setter.Value>
                                </Setter>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM