Je suis en train de faire une application qui montre l'utilisation du disque dur dans le système. Pour cela, je veux générer la grille et les contrôles (comme la barre de progression et les étiquettes) dynamiquement pour montrer l'utilisation. Existe-t-il un modèle XAML disponible à cette fin?Ajout dynamique de grille et de contrôles dans WPF
Répondre
I en utilisant ce code folowing pour générer dynamiquement des contrôles dans mon 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) {}
}
Les fonctions GetHardDiskDrives() et SetWindowHeight() sont des fonctions définies par l'utilisateur. Le jpb est d'obtenir des disques durs et de définir la hauteur de la fenêtre en fonction des nouveaux contrôles ajoutés.
J'ai trouvé l'autre réponse confuse à cause des commentaires en ligne ... l'ajout d'un columnDEFINITION (par exemple) "dessine" absolument RIEN - c'est très trompeur pour les débutants.
De plus: les lignes sont sélectionnées de façon répétée même si elles ont déjà été sélectionnées ... cela ajoute simplement un surcoût inutile. Cela rendra votre application vraiment très lente si vous utilisez plusieurs centaines de lignes.
Identique à la définition de WindowHeight.
est ici un (peu) solution plus efficace pour la ligne dynamique & colonne de gestion VB.NET: (utiliser Dispatcher.BeginInvoke() au lieu de Invoke() si vous souhaitez passer à un traitement asynchrone)
Private Delegate Sub MyDelegate3(ByVal iByte As Byte)
Private Delegate Function MyDelegate4() As Byte
Public Property GridColumns As Byte
Get
Dim del As New MyDelegate4(AddressOf GetColumns)
Return grid.Dispatcher.Invoke(del)
End Get
Set(ByVal value As Byte)
Dim del As MyDelegate3
If GridColumns > 0 Then
Dim diff As SByte = GridColumns - value
If diff > 0 Then 'Spalten abziehen
del = New MyDelegate3(AddressOf RemColDefs)
grid.Dispatcher.Invoke(del, diff)
Else 'Spalten hinzufügen
del = New MyDelegate3(AddressOf AddColDefs)
grid.Dispatcher.Invoke(del, Math.Abs(diff))
End If
Else
del = New MyDelegate3(AddressOf AddColDefs)
grid.Dispatcher.Invoke(del, value)
End If
End Set
End Property
Public Property GridRows As Byte
Get
Dim del As New MyDelegate4(AddressOf GetRows)
Return grid.Dispatcher.Invoke(del)
End Get
Set(value As Byte)
Dim del As MyDelegate3
If GridRows > 0 Then
Dim diff As SByte = GridRows - value
If diff > 0 Then 'Zeilen abziehen
del = New MyDelegate3(AddressOf RemRowDefs)
grid.Dispatcher.Invoke(del, diff)
Else 'Spalten hinzufügen
del = New MyDelegate3(AddressOf AddRowDefs)
grid.Dispatcher.Invoke(del, Math.Abs(diff))
End If
Else
del = New MyDelegate3(AddressOf AddRowDefs)
grid.Dispatcher.Invoke(del, value)
End If
End Set
End Property
Private Function GetRows() As Byte
Return grid.RowDefinitions.Count
End Function
Private Function GetColumns() As Byte
Return grid.ColumnDefinitions.Count
End Function
Private Sub AddRowDefs(ByVal iRows As Byte)
For r As Byte = 1 To iRows
Dim rowDef As New RowDefinition
rowDef.Height = GridLength.Auto
grid.RowDefinitions.Add(rowDef)
Next
End Sub
Private Sub RemRowDefs(ByVal iRows As Byte)
For r As Byte = 1 To iRows
If grid.RowDefinitions.Count > 0 Then
grid.RowDefinitions.Remove(grid.RowDefinitions(0))
End If
Next
End Sub
Private Sub AddColDefs(ByVal iCols As Byte)
For r As Byte = 1 To iCols
Dim colDef As New ColumnDefinition
colDef.Width = GridLength.Auto
grid.ColumnDefinitions.Add(colDef)
Next
End Sub
Private Sub RemColDefs(ByVal iCols As Byte)
For r As Byte = 1 To iCols
If grid.ColumnDefinitions.Count > 0 Then
grid.ColumnDefinitions.Remove(grid.ColumnDefinitions(0))
End If
Next
End Sub
- 1. Ajout dynamique de UserControls et recherche
- 2. Grille WPF entre les contrôles utilisateur?
- 3. Grille d'expansion dans WPF
- 4. Ajout panneau dynamique/contrôle
- 5. Création de contrôle dynamique dans WPF
- 6. Ajout dynamique de contrôles à un panneau - question de mise en page
- 7. WPF Aucun événement de contrôles dans RichTextBox
- 8. Ajout de lignes à la base de données wpf
- 9. ViewState et les contrôles supprimés de manière dynamique
- 10. Localisation de chaîne dynamique dans WPF
- 11. Liste dynamique descendante des contrôles dans WindowsForms et C#?
- 12. Ajout de void main() wpf
- 13. Éléments de grille WPF et texte aligné à droite
- 14. WPF: Comment les contrôles d'une grille peuvent-ils être redimensionnés automatiquement lors du redimensionnement de la grille?
- 15. Ajout de contrôles dynamiquement à un UpdatePanel dans ASP.NET AJAX
- 16. Comment puis-je accélérer l'ajout de contrôles à une grille WPF?
- 17. Style des données dans la grille de données dans wpf
- 18. Besoin de faire défiler une grille WPF
- 19. Comment créer de manière dynamique plusieurs contrôles dans Silverlight?
- 20. Contrôles de navigation de données WPF
- 21. WPF TextBlock dynamique gras et italique parties
- 22. TSQL ajout dynamique de colonnes dans la procédure stockée
- 23. Ajout dynamique de case à cocher à DataGrid dans Asp.Net
- 24. contrôles personnalisés, la création dynamique
- 25. Contrôles dynamiques et panneaux coulissants/déploiements dans WPF
- 26. L'utilisation de SetWindowTheme() sur les contrôles dans WindowsFormsHost dans WPF?
- 27. WPF Grille d'images - Meilleur contrôle à utiliser?
- 28. Commandes de déplacement de concepteur Visual Studio et ajout de colonnes de grille lorsque le formulaire est ouvert
- 29. J2ME - Table/grille dynamique avec cellules modifiables.
- 30. Plusieurs types de contrôles dans le même en-tête dans la grille de données dans Silverlight
Mille mercis Shining Annatar, c'est exactement ce que je cherchais mate :) –