Повторное использование ContextMenu для нескольких элементов управления в WPF - PullRequest
2 голосов
/ 15 декабря 2009

У меня есть три элемента управления в виде дерева, которые содержат разные (но в основном схожие данные), в результате действия, которые могут быть выполнены на каждом уровне, одинаковы для пользователя, но различаются по своему типу ( что-то, о чем я должен беспокоиться как разработчик). хотелось бы сделать, это повторно использовать это контекстное меню и передать ему тип (или иметь возможность получить его), а затем тип был бы передан действительной исполняемой функции.

Чтобы у нас была общая гадость, вот код:

<UserControl x:Class="ucControl" 
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 xmlns:local="clr-namespace:LocalNamespace"
 Name="ucControl" 
 xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit"
 Background="LightGray">
 <UserControl.Resources>
     <ContextMenu x:Key="GroupMenu">
         <MenuItem Header="Add Group" Command="New"/>
         <MenuItem Header="Rename Group" Command="local:CustomCommands.RenameGroup"/>
         <MenuItem Header="Delete Group" Command="Delete"/>
         <Separator/>
         <MenuItem Header="Change Contents of Group" Command="local:CustomCommands.EditGroupContents"/>
     </ContextMenu>
 </UserControl.Resources> 
 <UserControl.CommandBindings>
     <CommandBinding CanExecute="CanAddGroup" Command="New" Executed="AddGroup"/>
     <CommandBinding Command="local:CustomCommands.RenameGroup" CanExecute="CanRename" Executed="RenameGroup"/>
     <CommandBinding Command="local:CustomCommands.EditGroupContents" CanExecute="CanEditGroupContents" Executed="EditGroupContents"/>
 </UserControl.CommandBindings>
 <TabControl Name="tcTabs">
     <TabItem Header="Size" Name="tiSize">
         <TreeView Name="tvSizeGroup" ContextMenu="{StaticResource GroupMenu}"/>
     </TabItem>
     <TabItem Header="Brand" Name="tiBrand">
         <TreeView Name="tvBrandGroup" ContextMenu="{StaticResource GroupMenu}"/>
     </TabItem>
     <TabItem Header="Color" Name="tiColor">
         <TreeView Name="tvColorGroup" ContextMenu="{StaticResource GroupMenu}"/>
     </TabItem>
 </TabControl>

В этом примере я хотел бы, чтобы у каждого из Size, Brand и Color было одно и то же ContextMenu, но если контекстное меню открывается в Size TreeView, мне нужно добавить группу типа Size в мой Таблица. Это возможно, как я это делаю? Я пытаюсь избежать создания трех ContextMenus, что, очевидно, было бы способом сделать это.

1 Ответ

2 голосов
/ 15 декабря 2009

Есть только один способ, которым я знаю, чтобы достичь этого, В CommandHandler вам нужно проверить, какое дерево вызвало это.

попробуйте это в вашем CommandHandler:

MenuItem mnu = sender as MenuItem;
TreeView tv = null;
if(mnu!=null)
{
    tv = ((ContextMenu)mnu.Parent).PlacementTarget as TreeView;
}
if(tv.Name=="tvSizeGroup")
{
    //add group of Size
}
if(tv.Name=="tvBrandGroup")
{
    //add group of Brand
}

Надеюсь, это поможет !!

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