Da dove inizio a progettare un controllo personalizzato che contiene oggetti figlio?

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

  •  09-06-2019
  •  | 
  •  

Domanda

Penso che questa sia una domanda divertente a livello ingegneristico.

Devo progettare un controllo che visualizzi un grafico a linee.Quello che voglio essere in grado di fare è utilizzare un designer per aggiungerne più di uno Pens che in realtà descrivono i dati e la presentazione in modo che finisca con Xaml qualcosa in questo senso:

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

Il mio primo pensiero è estendere ItemsControl per il Chart classe.Questo mi porterà dove voglio andare o dovrei guardarlo da una direzione diversa, ad esempio estendendolo Panel?

Il requisito principale è poterlo utilizzare in una finestra di progettazione senza aggiungere codice C#.Affinché ciò sia fattibile, è necessario che mantenga la sua struttura nel modello con visualizzazione ad albero.In altre parole, se lavorassi con Expression Blend o Mobiform Aurora, potrei selezionare il grafico dall'albero logico o selezionare una qualsiasi delle singole penne per modificarne le proprietà.

È stato utile?

Soluzione

Vorrei usare Chart come ItemsControl e il suo ItemsPanel essere un Canvas (per un uso leggero sceglierei Grid come ItemsPanel).E ogni Pen sarà un CustomControl derivato dalla classe PolyLine.Ha senso?

Altri suggerimenti

Per coloro che sono interessati a creare il proprio controllo da un punto di vista dello sviluppo personale (come affermato nella domanda originale), suggerirei una struttura in questo formato.

<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>

Per questo dovrai esporre una raccolta Pens nel controllo utente (non lo vedrei come un controllo ItemsControl derivato).Questo controllo utente derivato incapsula altri controlli, in genere una griglia per posizionare un'etichetta per l'intestazione, etichette per i nomi degli assi, possibilmente un Canvas per l'area di disegno e un ItemsControl per visualizzare gli elementi nella legenda.


Per chi cerca una soluzione pronta all'uso

Per coloro che cercano una soluzione pronta all'uso, darei un'occhiata a CodePlex di VisiFire Controllo del grafico WPF.È compatibile con WPF e Silverlight e ha anche un file Applicazione Silverlight per inserire i tuoi dati e il tuo stile e generare XAML (o HTML) da incollare nella tua applicazione.

Un'altra opzione è estendere Canvas per il grafico ed estendere Shape per le penne.Quindi disegna dinamicamente la forma in base alle proprietà Colore/Dati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top