Как добавить menuItem в контекстное меню, которое имеет набор ItemsSource и ItemContainerStyle в XAML - PullRequest
0 голосов
/ 23 сентября 2011

У меня есть следующий код XAML.Содержимое в ItemSource отображается как 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>

Как я могу добавить новый элемент MenuItem, например, SubMenuHeader через XAML, в этот список?

1 Ответ

0 голосов
/ 23 сентября 2011

Создастся сам.Все, что вам нужно, предоставить ItemTemplate, в котором вы решите, что показывать и как показывать в каждом MenuItem.В противном случае реализация по умолчанию вызовет метод ToString() для каждого элемента в Owners и отобразит его в MenuItem.

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

Здесь я предположил, что тип владельца имеет имя свойстваTitle.Например, если Owners равно ObservableCollection<Owner>, то Owner определяется как:

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

Это основная идея о том, как использовать ItemTemplate.Теперь, если вы хотите использовать подменю в контекстном меню, вы должны использовать HierarchicalDataTemplate вместо DataTemplate в определении ItemTemplate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...