2009-12-14 3 views
2

서로 다른 (그러나 대부분 비슷한 데이터를 포함하는) 트리 뷰 컨트롤이 세 개 있습니다. 결과적으로 각 수준에서 취할 수있는 동작은 사용자가 염려하는 한 동일하지만, 그러나 그들의 타입이 다르다. (이것은 내가 개발자로서 걱정해야만하는 것이다.) 무엇을 할 것인가 과 같이이 컨텍스트 메뉴를 재사용하고 유형을 전달 (또는 검색 할 수 있음) 한 다음 유형이 실제 실행 된 함수로 전달되도록합니다. 나는 크기, 브랜드의 각각에 대해, 그리고 색상과 동일한의 ContextMenu을 가지고 있지만 것,이 예에서WPF의 여러 컨트롤에 대해 ContextMenu 재사용

<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> 

: 우리가 공통 verbage를가 할 수 있도록

는 여기에 몇 가지 코드입니다 컨텍스트 메뉴가 Size TreeView에서 끌어 올려지면 크기 테이블 그룹을 테이블에 추가해야합니다. 이 일이 가능한가요? 세 가지 ContextMenus를 만드는 것을 피하려고합니다. 분명히 이것을 할 수있는 방법 일 것입니다.

답변

2

이것을 달성하는 방법이 하나만 있습니다. CommandHandler에서 어떤 Tree가 이것을 호출했는지 확인해야합니다.

는 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 
} 

희망!

+0

그럴 필요가 있습니다. 어쨌든 일부 메소드에서는 요소에서 ID를 가져와야 할 것입니다. –

관련 문제