Par où dois-je commencer à concevoir un contrôle personnalisé contenant des objets enfants ?

StackOverflow https://stackoverflow.com/questions/49562

  •  09-06-2019
  •  | 
  •  

Question

Je pense que c'est une question amusante au niveau de l'ingénierie.

Je dois concevoir un contrôle qui affiche un graphique linéaire.Ce que je veux pouvoir faire, c'est utiliser un concepteur pour ajouter plusieurs Pens qui décrivent en fait les données et la présentation afin qu'elles aboutissent à quelque chose en Xaml dans ce sens :

<Chart>
  <Pen Name="SalesData" Color="Green" Data="..."/>
  <Pen Name="CostData" Color="Red" Data="..." />
  ...
</chart>

Ma première pensée est de prolonger ItemsControl pour le Chart classe.Est-ce que cela m'amènera là où je veux aller ou devrais-je le regarder sous un angle différent, comme étendre Panel?

L’exigence majeure est de pouvoir l’utiliser dans un designer sans ajouter de code C#.Pour que cela soit réalisable, il doit conserver sa structure dans le modèle arborescent.En d'autres termes, si je travaillais avec cela dans Expression Blend ou Mobiform Aurora, je pourrais sélectionner le graphique dans l'arborescence logique ou sélectionner l'un des stylos individuels pour modifier ses propriétés.

Était-ce utile?

La solution

J'opterais pour Chart comme ItemsControl et son ItemsPanel comme Canvas (pour une utilisation légère, j'opterais pour Grid comme ItemsPanel).Et chaque Pen sera un CustomControl dérivé de la classe PolyLine.Cela a-t-il un sens?

Autres conseils

Pour ceux qui souhaitent réaliser leur propre contrôle du point de vue du développement personnel (comme indiqué dans la question d'origine), je suggérerais une structure dans ce format.

<Chart>
  <Chart.Pens>
    <Pen Name="SalesData" Data="{Binding Name=SalesData}" />        
    <Pen Name="CostData">
      <Pen.Data>
        <PenData Y="12" X="Jan" />
        <PenData Y="34" X="Feb" />
      </Pen.Data>
    </Pen>
  </Chart.Pens>
</Chart>

Pour cela, vous devrez exposer une collection Pens dans le contrôle utilisateur (je ne verrais pas cela comme un contrôle ItemsControl dérivé).Ce contrôle utilisateur dérivé encapsulera d'autres contrôles, généralement une grille pour placer une étiquette pour le titre, des étiquettes pour les noms d'axe, éventuellement un canevas pour la zone de dessin et un ItemsControl pour afficher les éléments dans la légende.


Pour ceux qui recherchent une solution prête à l'emploi

Pour ceux qui recherchent une solution prête à l'emploi, je consulterais CodePlex pour VisiFire Contrôle graphique WPF.Il est compatible WPF et Silverlight et possède même un Application Silverlight pour que vous puissiez saisir vos données et votre style et les faire générer du XAML (ou HTML) à coller dans votre application.

Une autre option consiste à étendre Canvas pour le graphique et à étendre Shape pour les stylos.Dessinez ensuite dynamiquement la forme en fonction des propriétés Couleur/Données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top