¿Crear un control personalizado que sea un botón que también tenga Items y ItemsSource?

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

  •  06-07-2019
  •  | 
  •  

Pregunta

Estoy tratando de crear un control SplitButton que usa un ContextMenu para mostrar sus elementos. El SplitButton se deriva actualmente del Button . Tengo un PART_DropDownInitiator que es el pequeño icono en el que el usuario hace clic para que aparezca el ContextMenu para el SplitButton para mostrar sus elementos.

El problema es que estoy tratando de configurar un ContextMenu predeterminado dentro del SplitButton ' Template o estilo, de esta manera el El usuario del control no tiene que hacerlo por sí mismo. Al principio pensé que el usuario simplemente establecería la propiedad SplitButton.ContextMenu.Items en xaml, pero eso no parece ser posible. Ahora me gustaría agregar un Elementos y ItemsSource propiedades al SplitButton que el ContextMenu dentro del SplitButton puede unirse a ella. Y el usuario debería simplemente establecer la propiedad Items o ItemsSource en xaml o code-behind en el SplitButton ...

Pero, las propiedades Items y ItemsSource parecen originarse en ItemsControl , lo cual es un problema porque el SplitButton ya se deriva del Button . Así que no estoy seguro de qué hacer ... ¿Alguna idea?

¿Fue útil?

Solución

Si va por la ruta de herencia, debe derivar de HeaderedItemsControl en su lugar, donde su ControlTemplate predeterminado coloca el contenido del Encabezado como el contenido de un Botón.

Como resultado, también obtienes Items / ItemsSource: lo único que tienes que desarrollar es tu ControlTemplate.

Por último, considere implementar la parte del menú como una ventana emergente en lugar de un menú contextual. Los ContextMenu son un elemento de interfaz de usuario específico para un propósito (y generalmente aparecen con un clic derecho). Para obtener más información, consulte el ControlTemplate predeterminado de ComboBox en aero.normalcolor.xaml.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top