Creazione di un controllo personalizzato che è un pulsante che ha anche un elemento e una risorsa articoli?
-
06-07-2019 - |
Domanda
Sto cercando di creare un controllo SplitButton
che utilizza un ContextMenu
per visualizzare i suoi elementi. Il SplitButton
deriva attualmente dal Button
. Ho un PART_DropDownInitiator
che è la piccola icona su cui l'utente fa clic per visualizzare il ContextMenu
per il SplitButton
per mostrare i suoi elementi.
Il problema è che sto provando a impostare un ContextMenu
predefinito all'interno dello TemplateButton
o dello stile Template
, in questo modo il l'utente del controllo non deve farlo da solo. All'inizio ho pensato che avrei semplicemente impostato l'utente SplitButton.ContextMenu.Items
in xaml, ma ciò non sembra essere possibile. Ora vorrei aggiungere un Items
e ItemsSource
al SplitButton
che il ContextMenu
all'interno del Il modello SplitButton
può essere associato ad esso. E l'utente dovrebbe semplicemente impostare la proprietà Items
o ItemsSource
in xaml o code-behind su SplitButton
...
Tuttavia, entrambe le proprietà Items
e ItemsSource
sembrano provenire da ItemsControl
, il che è un problema perché SplitButton
deriva già dal Button
. Quindi non sono sicuro di cosa fare ... Qualche idea?
Soluzione
Se stai seguendo la strada dell'ereditarietà, dovresti invece derivare da HeaderedItemsControl, dove ControlTemplate predefinito inserisce il contenuto dell'intestazione come contenuto di un pulsante.
Di conseguenza, ottieni anche Items / ItemsSource: l'unica cosa che devi sviluppare è ControlTemplate.
Infine, considera di implementare la porzione di menu come Popup anziché come ContextMenu. I menu contestuali sono un elemento dell'interfaccia utente specifico per lo scopo (e generalmente vengono visualizzati con un clic con il pulsante destro del mouse). Per ulteriori informazioni, consultare il ControlTemplate predefinito di ComboBox in aero.normalcolor.xaml.