我正在构建一个派生自TabControl的自定义WPF控件。在ControlTemplate中,我使用ItemsControl来显示从模板(FileMenuItem类型的可观察集合)绑定的列表。程序执行过程中,我发现了以下错误在输出窗口:WPF自定义控件 - ItemsControl模板未应用
的ItemTemplate和ItemTemplateSelector 的项目已经 的ItemsControl的容器类型的被忽略; Type ='FileMenuItem'
FileMenuItem类型从MenuItem派生。如果我将基类更改为DependencyObject,则代码实际运行并应用模板(这是一个选项)。我GOOGLE了错误,找不到任何关于它的信息,有没有人在开发自定义控件时遇到这个问题?即使我有一个解决方法,我想知道发生了什么,我认为使用MenuItem作为基类是一个更清洁的实现。
我可以发布更多的代码,如果它会帮助。谢谢!
好吧,我想我明白 - 是这样,有可能支持此方案,或者我需要切换到从一个不同的基类继承?谢谢你的帮助! – 2010-05-03 20:19:34
有很多不同的方法可以去。您应该尝试确定是否要将集合项目视为控件(派生自UIElement)或数据(INotifyPropertyChanged或DependencyObject),或者同时创建数据类和UI控件或DataTemplate。另一种可能的选择是覆盖GetContainerForItemOverride和IsItemItsOwnContainerOverride的派生ItemsControl,以便为每个项目(ComboBox,ListBox等)使用FileMenuItem容器。 – 2010-05-04 02:50:50
为我解决这个问题的最简单(和有效的)方法之一一直是派生自己的ItemsControl,并重写'IsItemItsOwnContainerOverride'方法返回false,这意味着DataTemplate不会因为问题John而跳过解释。 – GEEF 2014-10-08 15:37:21