2014-12-29 4 views
0

"BODPresentationRule"개체 목록을 기반으로 메뉴를 동적으로 만듭니다. 목록에 추가 할 수 있지만 데이터 형식을 사용하여 (하위) MenuItems에 클릭 이벤트를 추가하는 방법을 찾을 수 없습니다.WPF에서 datatemplate을 사용하여 생성 된 MenuItem에 클릭 이벤트 추가

첫 번째 MenuItem에서 PolygonShapesMenu_OnClick Click 이벤트를 사용할 때 클릭이 있었지만 어떤 subMenuItem이 아닌지 확인할 수 있습니다.

XAML :

<Menu VerticalAlignment="Center" > 
    <MenuItem Name="PolygonShapesMenu" Click="PolygonShapesMenu_OnClick"> 
     <MenuItem.Header> 
      <StackPanel Orientation="Horizontal"> 
       <Image Source="/Assets/Images/polygon.png" Height="24" Width="24"></Image> 
       <Label>Polygoon</Label> 
      </StackPanel> 
     </MenuItem.Header> 
    </MenuItem> 
</Menu> 

뒤에 (메뉴 작성) 코드 [등 그리기 때문에 응용 프로그램의 성격에 참고, 내가 사용하지 않는 MVVM (많이 ...] :

// create and set the datatemplate 
DataTemplate polyDataTemplate = new DataTemplate(typeof (BODPresentationRule)); 
PolygonShapesMenu.ItemTemplate = polyDataTemplate; 

// create and add the text box to the data template 
var txtElement = new FrameworkElementFactory(typeof(TextBlock)); 
polyDataTemplate.VisualTree = txtElement; 

// set the binding in the text box bound to the name of the BodPresentationRule 
txtElement.SetBinding(TextBlock.TextProperty, new Binding("Name")); 

// TODO: how to intercept click event to the current selected item? 

// add items to menu 
foreach (BODPresentationRule rule in _presentationRules.OrderBy(r=>r.Name)) 
{ 
    PolygonShapesMenu.Items.Add(rule); 
} 

참고로,이 결과 :

example of menu

나는 트리거를 사용하여 datatemplate에 추가 될 클릭 이벤트를 가로 채기 위해 생각하고 있었지만 올바른 방법인지는 확실하지 않습니다.

요약 : BODPresentationRule (MenuItem)을 클릭 한 이유를 알아야합니다. 어떻게 그 규칙을 가리키는 정확한 클릭 이벤트를 가로 챌 수 있습니까?

답변

3

'헤더'MenuItem에 대한 클릭 만 처리합니다. 클릭 핸들러를 MenuItem의 ItemContainerStyle 내부 Style에 넣습니다.

<MenuItem> 
    <MenuItem.ItemContainerStyle> 
     <Style TargetType="{x:Type MenuItem}"> 
      <EventSetter Event="Click" Handler="PolygonShapesMenu_OnClick"/> 
     </Style> 
    </MenuItem.Resources> 
</MenuItem> 

그러면 클릭 한 하위 메뉴 항목이 발신자가됩니다.

+0

하, 하, TargetType과 스타일을 사용하는 생각하지 않았다. 감사! 그것은 작동합니다 (참고로 두 번째 줄은 당연히 입니다). 즐거운 휴일! – Jeankes

관련 문제