Ajouter dynamiquement plusieurs boutons à la fenêtre wpf?
comment ajouter plusieurs boutons à une fenêtre en c#? voici ce que je dois faire... je reçois plusieurs valeurs d'utilisateur d'un dictionnaire (dans la raison, seulement @ 5-6 valeurs). pour chaque valeur, je dois créer un bouton. maintenant, comment je nomme le bouton, pas le texte dans le bouton? comment définir la méthode "clic" pour chaque bouton (ils seront tous différents)? et comment puis-je effacer le bouton si je n'en veux plus?
3 réponses
Considérez que vous avez un StackPanel
nommé sp
for(int i=0; i<5; i++)
{
System.Windows.Controls.Button newBtn = new Button();
newBtn.Content = i.ToString();
newBtn.Name = "Button" + i.ToString();
sp.Children.Add(newBtn);
}
pour enlever le bouton vous pouvez faire
sp.Children.Remove((UIElement)this.FindName("Button0"));
Espérons que cette aide.
je voudrais encapsuler l'ensemble de la chose, il ne devrait normalement pas y avoir de point dans le nom du bouton. Quelque chose comme ceci:
public class SomeDataModel
{
public string Content { get; set; }
public ICommand Command { get; set; }
public SomeDataModel(string content, ICommand command)
{
Content = content;
Command = command;
}
}
alors vous pouvez créer des modèles et les mettre dans une collection liable:
private readonly ObservableCollection<SomeDataModel> _MyData = new ObservableCollection<SomeDataModel>();
public ObservableCollection<SomeDataModel> MyData { get { return _MyData; } }
alors vous avez juste besoin d'ajouter et de supprimer des éléments à partir de cela et de créer des boutons à la volée:
<ItemsControl ItemsSource="{Binding MyData}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Content}" Command="{Binding Command}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
pour plus d'information voir les articles pertinents sur MSDN:
Aperçu De La Liaison Des Données
Commandant Aperçu
Modèles De Données Vue D'Ensemble
code Xaml:
<Window x:Class="Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<UniformGrid x:Name="grid">
</UniformGrid>
</Window>
Code-behind:
public MainWindow()
{
InitializeComponent();
for (int i = 0; i < 10; ++i)
{
Button button = new Button()
{
Content = string.Format("Button for {0}", i),
Tag = i
};
button.Click += new RoutedEventHandler(button_Click);
this.grid.Children.Add(button);
}
}
void button_Click(object sender, RoutedEventArgs e)
{
Console.WriteLine(string.Format("You clicked on the {0}. button.", (sender as Button).Tag));
}