Comment charger dynamiquement le contrôle utilisateur basé sur WPF dans une fenêtre basée sur WPF (en utilisant du code lors de l'exécution)?WPF: comment charger dynamiquement les contrôles utilisateur?
Répondre
Je vous recommande vivement de jeter un oeil à Prism, car les interfaces utilisateur composites sont ce à quoi il sert. Cependant, comme cela nécessiterait de refactoriser l'ensemble de votre demande, je répondrai directement à votre question.
Si vous souhaitez un contrôle utilisateur unique dans un conteneur, placez un contrôle ContentControl dans votre code XAML, puis définissez la propriété Content. Si vous utilisez un modèle de vue, vous pouvez lier le contenu à une propriété FrameworkElement sur le modèle de vue:
contentControlInstance.Content = new CustomUserControl();
Si vous souhaitez plusieurs contrôles dans une liste, utilisez un ItemsControl et assignez un ObservableCollection <> à la propriété ItemsSource . Si vous utilisez un modèle de vue, vous pouvez lier ItemsSource à une propriété ObservableCollection sur le modèle View.
Ensuite, vous pouvez simplement ajouter/supprimer des vues de cette ObservableCollection:
private ObservableCollection<FrameworkElement> views =
new ObservableCollection<FrameworkElement>();
private void Initialize()
{
itemsControl.ItemsSource = views;
}
private void AddView(FrameworkElement frameworkElement)
{
views.Add(frameworkElement);
}
Pour ajouter plusieurs commandes dont vous avez besoin conteneur.
Supposons que vous ayez un conteneur StackPanel « MyStack »
<Window ..>
<StackPanel Name="MyStack" />
</Window>
Vous pouvez créer dynamiquement le contrôle et l'ajouter au conteneur. Voir code ci-dessous
void AddButtons()
{
Button B1=new Button(),B2=new Button(), B3=new Button();
B1.Content="Hello";
B2.Content="First";
B3.content="Application";
// Now you can set more properties like height, width, margin etc...
MyStack.Children.Add(B1);
MyStack.Children.Add(B2);
MyStack.Children.Add(B2);
}
Ou utiliser la liaison. Voici un exemple très grossier montrant comment différents contrôles WPF peuvent être affichés dans une seule fenêtre WPF en utilisant ContentControl et binding (ce que fait un toolkit comme Prism ou Caliburn Micro).
XAML:
<UserControl x:Class="ViewA">
...
<UserControl/>
<UserControl x:Class="ViewB">
...
<UserControl/>
code:
void ShowViewModelDialog (object viewModel)
{
var host = new MyViewHost();
FrameworkElement control = null;
string viewModelName = viewModel.GetType().Name;
switch (viewModelName)
{
case ("ViewModelA"):
control = new ViewA();
break;
case ("ViewModelB"):
control = new ViewB();
break;
default:
control = new TextBlock {Text = String.Format ("No view for {0}", viewModelName);
break;
}
if (control!=null) control.DataContext = viewModel;
host.DataContext = control;
host.Show(); // Host window will show either ViewA, ViewB, or TextBlock.
}
- 1. Ajouter dynamiquement différents contrôles utilisateur
- 2. Charger dynamiquement le contrôle utilisateur
- 3. Grille WPF entre les contrôles utilisateur?
- 4. Contrôles utilisateur créés dynamiquement en C#
- 5. Comment faire des propriétés paramétrables dans les contrôles utilisateur WPF?
- 6. Comment permuter dynamiquement les contrôles ascx?
- 7. Gestion de l'état usercontrol sur les contrôles utilisateur ajoutés dynamiquement
- 8. WPF et les événements de contrôles créés dynamiquement
- 9. Charger les contrôles utilisateur ASP.Net via jQuery AJAX
- 10. Comment générer dynamiquement une combinaison de contrôles utilisateur ASP.NET?
- 11. Contrôles utilisateur Windows Forms dans l'application WPF
- 12. WPF Lier DataTable aux contrôles utilisateur répétés
- 13. Dynamiquement ajouter des contrôles utilisateur à Silverlight 4 page
- 14. Mise au rebut des contrôles utilisateur WPF
- 15. Comment charger dynamiquement MathJax?
- 16. Charger dynamiquement les extensions php
- 17. Contrôles dynamiquement
- 18. Liaison de contrôles utilisateur ajoutés dynamiquement dans Silverlight 4
- 19. Charger 3 contrôles utilisateur (application web) sur leurs propres threads
- 20. Comment charger dynamiquement UserControls de manière correcte?
- 21. Contrôles utilisateur chargés dynamiquement et persistants dans l'état d'affichage
- 22. Comment instancier les contrôles hébergés .NET chargés dynamiquement via JavaScript?
- 23. Méthodologies utilisées pour concevoir les contrôles utilisateur
- 24. Comment utiliser les contrôles personnalisés dans WPF
- 25. ASP.NET: Comment déboguer les contrôles utilisateur chargés dynamiquement à l'aide de LoadControl (chemin de chaîne);
- 26. ajouter des contrôles dynamiquement
- 27. Basculer entre les contrôles WPF
- 28. Validation jQuery sur les contrôles créés dynamiquement
- 29. Charger les images générées dynamiquement du cache
- 30. actionscript 3.0: charger dynamiquement les polices