Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF上下文菜单项模板,菜单项中的菜单项_C#_Wpf_Contextmenu_Menuitem - Fatal编程技术网

C# WPF上下文菜单项模板,菜单项中的菜单项

C# WPF上下文菜单项模板,菜单项中的菜单项,c#,wpf,contextmenu,menuitem,C#,Wpf,Contextmenu,Menuitem,我有以下xaml: <ContextMenu ItemsSource="{Binding TestItems}"> <ContextMenu.ItemTemplate> <DataTemplate DataType="models:TestItemModel"> <MenuItem IsChecked="{Binding IsSelected}" Header="{Binding Header}"

我有以下xaml:

<ContextMenu ItemsSource="{Binding TestItems}">
     <ContextMenu.ItemTemplate>
          <DataTemplate DataType="models:TestItemModel">
              <MenuItem IsChecked="{Binding IsSelected}" Header="{Binding Header}"  />
          </DataTemplate>
     </ContextMenu.ItemTemplate>
</ContextMenu>

TestItemModel类仅由IsSelected boolean属性和Header string属性组成

TestItems是TestItemModels的列表

数据绑定到contextmenu,但它作为MenuItem中的MenuItem反映在UI中(具有额外的边距,使菜单非常大)。我可以通过将DataTemplate中的MenuItem更改为文本框来解决这个问题,但是我无法再绑定IsSelected(我需要它来实现可视化属性)

关于这一点,我有几个问题:

  • 为什么菜单项中有菜单项?这对我来说没有意义,因为它不是绑定到menuitem列表,而是绑定到TestItemModels列表
  • 我如何解决这个问题

因为
MenuItem
是容器类型,当它将视图模型转换为可视项时,它会将模板包装在
MenuItem
中。同样地,
ListBox
将创建
ListBoxItem
ListView
将使用
ListViewItem
。要绑定包装的属性,需要使用
ItemContainerStyle


或者,如果您愿意,可以使用
ItemTemplate
ItemContainerStyle



在这种情况下,
ItemTemplate
中的任何内容都将成为
MenuItem.Header
,但是
IsChecked
属性仍然需要绑定在
ItemContainerStyle

中@Areius没有问题。很高兴这有帮助。