Adding Grid and Controls dynamically in WPF

后端 未结 2 988
夕颜
夕颜 2021-02-04 04:01

I am now doing an application that shows the HDD usage in the system. For that I want to generate the grid and the controls (like progress bar and labels) dynamically to show th

2条回答
  •  遇见更好的自我
    2021-02-04 04:10

    I use the folowing code to generate controls dynamically in my code

    Label[] drivesLabel;
    Label[] percentageLabel;
    ProgressBar[] drivesProgress;
    int drivesCount = 0;
    
    private void DrawControls()
    {
        try
        {
            // Getting drive list.
            List driveList = GetHardDiskDrives();
            drivesCount = driveList.Count;
    
            // Initializing new Grid.
            Grid drivesGrid = new Grid();
            drivesGrid.Children.Clear();
            DrivesBorder.Child = drivesGrid;
    
            // Adding Rows and Colums to Grid.
            RowDefinition[] rows = new RowDefinition[2*drivesCount + 1];
            ColumnDefinition[] columns = new ColumnDefinition[6];
    
            // Draw Rows.
            for (int i = 0; i < 2*drivesCount + 1; i++)
            {
                rows[i] = new RowDefinition();
                drivesGrid.RowDefinitions.Add(rows[i]);
    
                // Setting Row height.
                rows[i].Height = (0 == i % 2) ? new GridLength( 5 ): new GridLength( 25 );
            }
            // Draw Columns.
            for (int i = 0; i < 6; i++)
            {
                columns[i] = new ColumnDefinition();
                drivesGrid.ColumnDefinitions.Add(columns[i]);
                if (i % 2 == 0)
                {
                    // Setting column width.
                    columns[i].Width = new GridLength(5);
                }
            }
    
            // Setting column width.
            columns[1].Width = new GridLength(60);
            columns[3].Width = new GridLength(180);
            columns[5].Width = new GridLength(60);
    
            // Draw Labels to show drive letters.
            drivesLabel = new Label[drivesCount];
    
            // Draw Progress bar to show drive usage.
            drivesProgress = new ProgressBar[drivesCount];
    
            // Draw Labels to show drive usage.
            percentageLabel = new Label[drivesCount];
    
            // Adding Labels and Progressbars to Grid.
            for (int i = 0, j = 1; i < drivesCount; i++, j++)
            {
                // Initialize Labels to show drives.
                drivesLabel[i] = new Label();
                drivesLabel[i].Content = driveList[i].Name;
                drivesLabel[i].Foreground = Brushes.Navy;
                Grid.SetRow(drivesLabel[i], i + j);
                Grid.SetColumn(drivesLabel[i], 1);
                drivesGrid.Children.Add(drivesLabel[i]);
    
                // Initialize ProgressBar to show usage.
                drivesProgress[i] = new ProgressBar();
                drivesProgress[i].FlowDirection = FlowDirection.LeftToRight;
                drivesProgress[i].HorizontalAlignment = HorizontalAlignment.Center;
                drivesProgress[i].VerticalAlignment = VerticalAlignment.Center;
                drivesProgress[i].Orientation= Orientation.Horizontal;
                drivesProgress[i].Value = 0;
                drivesProgress[i].Maximum = 100;
                drivesProgress[i].Width = 180;
                drivesProgress[i].Height = 18;
                Grid.SetRow(drivesProgress[i], i + j);
                Grid.SetColumn(drivesProgress[i], 3);
                drivesGrid.Children.Add(drivesProgress[i]);
    
                // Initialize Labels  to show usage in percentage.
                percentageLabel[i] = new Label();
                percentageLabel[i].Content = "0 %";
                Grid.SetRow(percentageLabel[i], i + j);
                Grid.SetColumn(percentageLabel[i], 5);
                drivesGrid.Children.Add(percentageLabel[i]);
    
                // Setting window height.
                SetWindowHeight(30);
            }
        }
        catch(Exception Ex) {}
    }
    

    The functions GetHardDiskDrives() and SetWindowHeight() are user defined functions. The jpb is to get harddrives and Set the window height according to the new controls added.

提交回复
热议问题