2010-08-10 8 views
0

J'ai une vue avec quelques contrôles et une viewbox. À l'heure actuelle dans la viewbox est une grille et un graphique en bas. L'application lit un fichier XML et actualise le contenu de la grille et le graphique pour chaque noeud dans le fichier XML.WPF Custom Control

Maintenant, l'application doit non seulement afficher une grille avec un graphique. En fonction du nœud XML, l'application doit montrer une grille avec un graphique comme maintenant ou un grahpic et en bas 2 lignes de texte.

Répondre

1

Vous avez expliqué ce qu'est votre application, mais vous n'avez pas posé de question. S'il vous plaît énoncer la question, et je peux essayer de vous donner une meilleure réponse.

Ma meilleure estimation est "comment faire ceci? Ai-je besoin d'écrire un contrôle personnalisé?" Si c'est ce que vous demandez, vous ne le faites probablement pas.

Habituellement, vous n'avez pas besoin d'un contrôle personnalisé pour créer une vue spécialisée pour une listbox, une listview ou un gridview. Vous pouvez souvent utiliser des modèles de données, des modèles de contrôle ou des styles pour réaliser ce que vous recherchez.

Je ne sais pas si cela est une bonne ressource, mais le XAML semble que cela peut être un bon point de départ pour apprendre à faire des modèles de contrôle: http://ligao101.wordpress.com/2007/07/27/customizing-listview-in-wpf-part-i/

googler simplement pour l'un de ces termes (» ListView data template ", etc) vous donnera probablement de bonnes informations.

Edit:

D'après les commentaires, vous essayez de soutenir l'un des deux types de données dans le même espace dans l'interface utilisateur, en fonction de ce qui est dans votre fichier XML:

  • image seulement
  • image, ainsi que deux lignes de texte

une façon de résoudre ce serait de créer un modèle de vue pour votre XML articles et se lient les articles à ces modèles de vue:

public class XmlItemViewModel // Call this something more appropriate to your app 
{ 
    public Visibility TextVisibility { get; set; } 
    public string Text1 { get; set; } 
    public string Text2 { get; set; } 
    public Image Picture { get; set; } 
} 

Si vous avez déjà une autre classe qui a ces données, garder et faire le modèle de vue en lecture des propriétés hors cette classe. Lier le XBLA TextBlock Visibilité propriété à "{Binding TextVisibility}", et cela devrait fonctionner. Si vous définissez la propriété viewmodel "Visibility.Collapsed", les blocs de texte disparaissent et votre ViewBox doit rétrécir pour ne contenir que l'image.

Si vous faites cela, vous n'avez pas besoin d'un contrôle personnalisé, juste une classe ViewModel personnalisée.

S'il ne semble pas s'effondrer correctement, vous pouvez envelopper vos blocs d'image et de texte avec un StackPanel ou un WrapPanel.

+0

Mon problème est, je ne sais pas ce que je dois rechercher. J'ai expliqué la fonctionnalité actuelle et la fonctionnalité dont j'ai besoin. Je pense que personnaliser un ListView n'est pas ce que je recherche. Parce que la structure est différente. Au moment: ... Maintenant, je veux plus de cette structure: Je dois changer le contenu du ViewBox lors de l'exécution. – rakete

+0

@elr: Avez-vous besoin de supporter les deux? Comme dans, un élément dans la ViewBox peut afficher uniquement un graphique, et l'autre peut afficher un graphique plus deux lignes de texte, et il prend en charge les deux en même temps? Ou avez-vous juste besoin de la version graphique + texte? –

+0

Oui, je dois soutenir les deux. La vue (graphique + 2 lignes ou grille + graphique) dépend du nœud actuel dans le fichier xml. Toutes les 5 secondes, le prochain nœud sera chargé. Le fichier xml contient les deux types d'entrées. – rakete