views:

1174

answers:

1

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 the usage. Is there any XAML template available for this purpose?

+2  A: 

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<DriveInfo> 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.

Sauron
A thousand thanks Shining Annatar, this is exactly what I was looking for mate :)
Binary Worrier