En XAML nous avons 4 modules d'extension. Ils héritent tous d'un ViewModel (de type ExpanderListViewModel) à partir conteneur StackPanel par DataContext.
Ils ont tous se lier à la propriété unique sur ViewModel classe. Et ont défini un index unique pour eux-mêmes à l'aide de ConverterParameter dans la liaison. Cet index est enregistré dans SelectedExpander propriété chaque fois que vous développez un expandeur. Et à l'aide de cet indice, les Converter retourne true si l'index stocké correspond avec l'index et false en cas de stockage de l'index ne correspond pas.
Mettre un point d'arrêt dans Convert et ConvertBack méthodes de Converter classe et vous verrez ce qui se passe.
Vous avez la solution pour fournir de bon code qui fonctionnait dans mon exemple de projet de test. Au-dessus de tout ce que je ne veux pas de trucs 3ème partie/dll pour un minimaliste comportement... merci decyclone! Si vous parlez de la Silverlight Toolkit, il est officiellement partie de future Silverlight. Ses maintenu par les gars de Microsoft et les contrôles ajoutés ajoutés à la future version de Silverlight. Donc, il n'y a aucune raison que vous ne devriez pas l'utiliser. J'ai trouvé cette solution très utile. Merci Comment puis-je étendre 'Expander 1' au Démarrage de l'application ? Bien que cela a fonctionné pour moi, il a toujours ce une exception au démarrage du programme. Certains de mes autres code était déjà à l'aide de DataContext = this; sur ma fenêtre principale, donc je l'ai corrigé en ajoutant public ExpanderListViewModel ExpanderListViewModel { get; set; } = new ExpanderListViewModel(); à ma fenêtre principale de la classe, et la modification de la liaison à IsExpanded="{Binding ExpanderListViewModel.SelectedExpander, ... C'est possible, j'avais quelque chose d'autre programme d'installation incorrecte, mais j'ai pensé qu'il pourrait être utile à quelqu'un d'autre.
PrivateSubCollapseExpander(ByVal sender AsSystem.Object,ByVal e AsSystem.Windows.RoutedEventArgs)
sender.IsExpanded=FalseEndSub
L'inconvénient de cette solution est que lorsque vous cliquez n'importe où ailleurs dans votre usercontrol/fenêtre de l'expandeur aussi perd le focus et l'effondrement de l'expanseur.
Utiliser MVVM et lier la IsExpanded propriété d'un indicateur booléen sur les modèles de vue. Lorsque l'on est mis à jour pour true, régler tous les autres à false.
devrait contrôle logique de l'être dans le viewmodel? Quoi d'autre est un modèle de vue, mais le contrôle de la vue? Aussi longtemps que vous pouvez instancier et de tester le modèle de vue sans avoir à instancier un quelconque point de vue des objets, j'appelle le découplage d'un succès.
4) Pour contrôler l'ouverture/fermeture de tous les "Extenseurs" sur le nommé "StackPanel1" StackPanel vous suffit d'ajouter le code ci-dessous une fois.
VB code-behind:
PrivateSubExpander_Expanded(sender AsObject, e AsRoutedEventArgs)ForEach exp AsExpanderInStackPanel1.ChildrenIf exp IsNot sender Then
exp.IsExpanded=FalseEndIfNextEndSub
5)vous pouvez Maintenant modifier/ajouter ce contenu, du bouton, zone de texte etc.. vous avez juste besoin de ne pas modifier 2 choses 1, "StackPanel Nom" 2, "Expander Étendu", sans mettre à jour le code-behind d'autre choses ne fonctionnent pas.
Espérons que cette information est utile pour vous.
Ce qui se passe?
1) Tous les panneaux sont les parents et tous les contrôles sur le panneau sont des enfants,
2) Tous les contrôles sont les enfants d'un parent panneau.
3) Une classe traite avec un seul appel à la fois.
4) La classe traite avec l'enfant.
6) La classe de passer à côté de l'enfant.
7) s'Arrête lorsque tous les enfants ont été posées.
De sorte que le pseudo-code est comme ceci:
1) être à l'Écoute pour un enfant nommé x
2) Demandez à chaque enfant de parents de la liste des enfants
3) Si l'enfant n'est pas appel puis
4) l'Enfant est élargi est faux
5) Fin en demandant à ce que l'enfant
6) passer à côté de l'enfant et de demander à nouveau
7) Jusqu'à ce que tous les enfants ont été invités
Vous pourriez expliquer ce que fait cette réponse correcte.
Comment puis-je étendre 'Expander 1' au Démarrage de l'application ?
J'ai ajouté dans le ViewModel:
SelectedExpander="1";
En raison du fait, que le "1" n'est pas le même objet que le "1" dans le code XAML cela ne fonctionne pas, alors j'ai changé decyclone réponse comme ceci:
Essayer le code suivant:
XAML:
Converter:
ViewModel:
Initialisation
Explication:
En XAML nous avons 4 modules d'extension. Ils héritent tous d'un
ViewModel
(de typeExpanderListViewModel
) à partir conteneurStackPanel
parDataContext
.Ils ont tous se lier à la propriété unique sur
ViewModel
classe. Et ont défini un index unique pour eux-mêmes à l'aide deConverterParameter
dans la liaison. Cet index est enregistré dansSelectedExpander
propriété chaque fois que vous développez un expandeur. Et à l'aide de cet indice, lesConverter
retournetrue
si l'index stocké correspond avec l'index etfalse
en cas de stockage de l'index ne correspond pas.Mettre un point d'arrêt dans
Convert
etConvertBack
méthodes deConverter
classe et vous verrez ce qui se passe.Si vous parlez de la
Silverlight Toolkit
, il est officiellement partie defuture Silverlight
. Ses maintenu par les gars deMicrosoft
et les contrôles ajoutés ajoutés à la future version deSilverlight
. Donc, il n'y a aucune raison que vous ne devriez pas l'utiliser.J'ai trouvé cette solution très utile. Merci
Comment puis-je étendre 'Expander 1' au Démarrage de l'application ?
Bien que cela a fonctionné pour moi, il a toujours ce une exception au démarrage du programme. Certains de mes autres code était déjà à l'aide de
DataContext = this;
sur ma fenêtre principale, donc je l'ai corrigé en ajoutantpublic ExpanderListViewModel ExpanderListViewModel { get; set; } = new ExpanderListViewModel();
à ma fenêtre principale de la classe, et la modification de la liaison àIsExpanded="{Binding ExpanderListViewModel.SelectedExpander, ...
C'est possible, j'avais quelque chose d'autre programme d'installation incorrecte, mais j'ai pensé qu'il pourrait être utile à quelqu'un d'autre.OriginalL'auteur decyclone
Juste réglage de la Perdu l'accent semble être la meilleure façon de le faire.
Xaml:
VB:
OriginalL'auteur skyline
Utiliser MVVM et lier la IsExpanded propriété d'un indicateur booléen sur les modèles de vue. Lorsque l'on est mis à jour pour
true
, régler tous les autres àfalse
.Quoi d'autre est un modèle de vue, mais le contrôle de la vue? Aussi longtemps que vous pouvez instancier et de tester le modèle de vue sans avoir à instancier un quelconque point de vue des objets, j'appelle le découplage d'un succès.
OriginalL'auteur OJ.
c'est la façon dont je l'ai fait:
1) ajout d'un StackPanel et on DOIT ajouter une étiquette avec le nom de l'attribut (comme c'est le maître).
2) ajouter autant d'Extenseurs que vous en avez besoin (de 1 à 100, si nécessaire), chacune DOIT avoir:-
ajoutée (tous les avis ont 100% de la même formulation).
3) aucun autre détail n'a besoin pour correspondre à chaque ( pas de hauteur de noms etc..).
Xaml:
4) Pour contrôler l'ouverture/fermeture de tous les "Extenseurs" sur le nommé "StackPanel1" StackPanel vous suffit d'ajouter le code ci-dessous une fois.
VB code-behind:
5)vous pouvez Maintenant modifier/ajouter ce contenu, du bouton, zone de texte etc.. vous avez juste besoin de ne pas modifier 2 choses 1, "StackPanel Nom" 2, "Expander Étendu", sans mettre à jour le code-behind d'autre choses ne fonctionnent pas.
Espérons que cette information est utile pour vous.
Ce qui se passe?
1) Tous les panneaux sont les parents et tous les contrôles sur le panneau sont des enfants,
2) Tous les contrôles sont les enfants d'un parent panneau.
3) Une classe traite avec un seul appel à la fois.
4) La classe traite avec l'enfant.
6) La classe de passer à côté de l'enfant.
7) s'Arrête lorsque tous les enfants ont été posées.
De sorte que le pseudo-code est comme ceci:
1) être à l'Écoute pour un enfant nommé x
2) Demandez à chaque enfant de parents de la liste des enfants
3) Si l'enfant n'est pas appel puis
4) l'Enfant est élargi est faux
5) Fin en demandant à ce que l'enfant
6) passer à côté de l'enfant et de demander à nouveau
7) Jusqu'à ce que tous les enfants ont été invités
OriginalL'auteur Simon 5968
@wassim-azirar demandé à la accepté de répondre:
J'ai ajouté dans le ViewModel:
En raison du fait, que le "1" n'est pas le même objet que le "1" dans le code XAML cela ne fonctionne pas, alors j'ai changé decyclone réponse comme ceci:
La réponse de decyclone a été très utile pour moi - Merci.
Donc, je tiens à partager mon expérience si quelqu'un en a besoin.
OriginalL'auteur h.m.i.13
Essayer de l'Accordéon de contrôle de WPF Toolkit - février 2010 Release
http://www.dotnetspark.com/kb/1931-accordion-wpf-toolkit-tutorial.aspx
Exemple de code:
OriginalL'auteur biju
J'ai aussi besoin de cela, mais toutes les réponses a trop de travail de l'OMI.
Voici comment j'ai fait:
chacun eu 2 événements
qu'il.
OriginalL'auteur VeryNoob