Estoy construyendo un control WPF personalizado que se deriva de TabControl. En ControlTemplate, estoy usando ItemsControl para mostrar una lista que está siendo vinculada desde la plantilla (una colección observable de tipo FileMenuItem). Durante la ejecución del programa, estoy recibiendo el siguiente error en la ventana de salida:WPF Custom Control - ItemsControl plantilla no se aplica
ItemTemplate y ItemTemplateSelector se ignoran para los artículos de tipo de contenedor ya la de ItemsControl; Tipo = 'FileMenuItem'
El tipo FileMenuItem se deriva de MenuItem. Si cambio la clase base a DependencyObject, el código realmente se ejecuta y se aplica la plantilla (entonces esa es una opción). Busqué en Google el error y no pude encontrar nada al respecto, ¿alguien se ha topado con esto mientras desarrollaba controles personalizados? Aunque tengo una solución alternativa, me gustaría entender qué está pasando, y creo que usar MenuItem como clase base es una implementación más limpia.
Puedo publicar más código si me ayudaría. ¡Gracias!
Ok, creo que entiendo - es así, es posible soportar este escenario, o tengo que cambiar a heredar de una clase base diferente? ¡Gracias por tu ayuda! –
Hay muchas formas diferentes de ir. Debería intentar decidir si desea tratar los elementos de la colección como controles (derivados de UIElement) o datos (INotifyPropertyChanged u DependencyObject) o crear una clase de datos y un control de UI o DataTemplate. Otra opción posible es un ItemsControl derivado que anula GetContainerForItemOverride y IsItemItsOwnContainerOverride para usar un contenedor FileMenuItem para cada elemento (ComboBox, ListBox, etc.). –
Uno de los métodos más simples (y efectivos) para resolver este problema ha sido siempre derivar tu propio ItemsControl, y anular el método 'IsItemItsOwnContainerOverride' para devolver falso, lo que significa que el DataTemplate no se saltará debido al problema John explicado. – GEEF