2011-03-07 10 views
5

Sto cercando di costruire un wich UserControl è in grado di prendere elementi da XAML come questo:Come creare ComboBox come UserControl in WPF

  <ComboBox > 
       <ComboBoxItem /> 
       <ComboBoxItem /> 
       <ComboBoxItem /> 
      </ComboBox> 

Nel ComboBox, si può solo aggiungere gli elementi tra il ComboBox tag, e vorrei copiare questo, ma non so da dove cominciare.

finito dovrebbe essere così:

<cis:ReportControl Grid.Row="3"> 
      <cis:ReportItem /> 
    </cis:ReportControl> 

Nel cis:ReportControl, ci sono alcune Button s ed un ComboBox, e fondamentalmente solo voglio alimentare la ComboBox con elementi.

Il Riporta articolo è solo un ComboBoxItem con alcune proprietà in più.

Edit:

Ho implementato secondo le @Snowbears risposta, ma il problema ora è che il controllo stesso ha come un elemento. Penso che questo è perché ho alcuni contenuti, e definendo il ContentProperty al mio ComboBox, viene reindirizzato nella scatola. Cosa posso fare per evitare questo?

Edit II:

Funziona pienamente ora con questo:

private ItemCollection reportItems; 
    public ItemCollection ReportItems 
    { 
     get 
     { 
      if (reportItems == null) 
      { 
       reportItems = this.ComboBoxReports.Items; 
      } 
      return reportItems; 
     } 
    } 

con il [ContentProperty("ReportItems")] attributo. ComboBoxReports è il ComboBox nel controllo e ho dovuto ereditare da ItemsControl per farlo funzionare.

risposta

4
  1. È necessario creare proprietà nella tua UserControl che esporrà qualcosa di attuazione IList interfaccia. Diciamo che questa proprietà sarà denominata ReportItems. Questa proprietà non dovrebbe avere setter e dovrebbe essere inizializzata in UserControl stesso nel costruttore in base all'inizializzazione del campo sul backing field.
  2. UserControl deve essere contrassegnato con ContentProperty attributo con il nome della proprietà (ReportItems)
  3. combobox interno dovrebbe avere è ItemsSource legato alla proprietà di UserControl ReportItems
0

se cercate per How Create own Control È necessario cercare due cose:

1) Custom Control1 o User Control1 (è dipende dal vostro 0.123.)
2) Dependency Properties (usarle nel controllo)

Penso che si potrebbe essere necessario utilizzare Custom-controllo e inoltre è possibile ereditare la vostra abitudine-Control da ComboBox o altri controlli.