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
2009-09-08 10:45:31
A thousand thanks Shining Annatar, this is exactly what I was looking for mate :)
Binary Worrier
2010-05-04 20:47:04