WPF ContextMenu itemtemplate,menuitem中的menuitem
我有以下xaml:
TestItemModel类仅包含IsSelected布尔属性和Header字符串属性。
TestItems是TestItemModels的列表。
数据绑定到contextmenu,但它在UI中反映为MenuItem中的MenuItem(具有额外的边距,使菜单非常大)。 我可以通过将DataTemplate中的MenuItem更改为TextBox来解决这个问题,但之后我再也无法绑定IsSelected(我需要可视化属性)。
我对此有几个问题:
- 为什么MenuItem中有MenuItem? 这对我来说没有意义,因为它没有绑定到menuitem列表而是绑定到TestItemModel列表。
- 我该如何解决这个问题?
因为MenuItem
是容器类型,当它将视图模型转换为可视项时,它会将您的模板包装在MenuItem
。 以同样的方式, ListBox
将创建ListBoxItem
或ListView
将使用ListViewItem
。 要绑定包装器的属性,您需要使用ItemContainerStyle
或者,如果您愿意,可以使用ItemTemplate
和ItemContainerStyle
部分地完成
在这种情况下, ItemTemplate
中的任何内容都将成为MenuItem.Header
但仍需要在ItemContainerStyle
绑定IsChecked
属性