如何将 menuItem 添加到在 XAML 中设置了 ItemsSource 和 ItemContainerStyle 的上下文菜单

发布于 2024-12-06 02:56:37 字数 924 浏览 1 评论 0原文

我有以下 XAML 代码。 ItemsSource 中的内容显示为 MenuItems。

<controls:DropDownButton x:Name="btnOwner"
                 DockPanel.Dock="Left"
                 Style="{StaticResource btnStyle}"
                 HorizontalAlignment="Left"
                 Visibility="{Binding IsOwnerVisible}">
<controls:DropDownButton.Content>
    <ContentControl Width="22"
                Height="22"
                Style="{StaticResource iconOwner}"/>
</controls:DropDownButton.Content>
<controls:DropDownButton.DropDown>
    <ContextMenu HorizontalContentAlignment="Stretch"
             ItemsSource="{Binding Owners, Mode = TwoWay, UpdateSourceTrigger=PropertyChanged}"                 
             ItemContainerStyle="{StaticResource OwnerStyle}">
    </ContextMenu>
</controls:DropDownButton.DropDown>

如何通过 XAML 将新的 menuItem(例如 SubMenuHeader)添加到此列表?

I have the following XAML code. The contents in the ItemsSource are displayed as MenuItems.

<controls:DropDownButton x:Name="btnOwner"
                 DockPanel.Dock="Left"
                 Style="{StaticResource btnStyle}"
                 HorizontalAlignment="Left"
                 Visibility="{Binding IsOwnerVisible}">
<controls:DropDownButton.Content>
    <ContentControl Width="22"
                Height="22"
                Style="{StaticResource iconOwner}"/>
</controls:DropDownButton.Content>
<controls:DropDownButton.DropDown>
    <ContextMenu HorizontalContentAlignment="Stretch"
             ItemsSource="{Binding Owners, Mode = TwoWay, UpdateSourceTrigger=PropertyChanged}"                 
             ItemContainerStyle="{StaticResource OwnerStyle}">
    </ContextMenu>
</controls:DropDownButton.DropDown>

How can I add a new menuItem something like a SubMenuHeader via XAML to this List?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

独﹏钓一江月 2024-12-13 02:56:38

它会创造自己。您需要提供 ItemTemplate 来决定在每个 MenuItem 中显示什么以及如何显示。否则,默认实现将为 Owners 中的每个项目调用 ToString() 方法,并将其显示在 MenuItem 中。

<ContextMenu ItemsSource="{Binding Owners}">
  <ContextMenu.ItemTemplate>
      <DataTemplate>
           <TextBlock Text="{Binding Title}"/>
      </DataTemplate>
  </ContextMenu.ItemTemplate>
</ContextMenu>

在这里,我假设所有者的类型有一个属性名称 Title。例如,如果 OwnersObservableCollection,则 Owner 定义为:

public class Owner
{
     public string Title { get; set;}
     //...
}

这是如何使用 的基本思想项目模板。现在,如果您想要上下文菜单中的子菜单项,那么您必须使用 HierarchicalDataTemplate 而不是 ItemTemplate 定义中的 DataTemplate

It will create itself. All that you need to provide the ItemTemplate in which you will decide what to show and how to show in each MenuItem. Otherwise, the default implemention will call ToString() method for each item in Owners, and will display it in MenuItem.

<ContextMenu ItemsSource="{Binding Owners}">
  <ContextMenu.ItemTemplate>
      <DataTemplate>
           <TextBlock Text="{Binding Title}"/>
      </DataTemplate>
  </ContextMenu.ItemTemplate>
</ContextMenu>

Here, I assumed that the type of owner has a property name Title. For example, if Owners is ObservableCollection<Owner>, then Owner is defined as:

public class Owner
{
     public string Title { get; set;}
     //...
}

That is basic idea as to how to use ItemTemplate. Now if you want submenuitem in the context menu, then you've to use HierarchicalDataTemplate instead of DataTemplate in the ItemTemplate definition.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文