"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);
}
참고로,이 결과 :
나는 트리거를 사용하여 datatemplate에 추가 될 클릭 이벤트를 가로 채기 위해 생각하고 있었지만 올바른 방법인지는 확실하지 않습니다.
요약 : BODPresentationRule (MenuItem)을 클릭 한 이유를 알아야합니다. 어떻게 그 규칙을 가리키는 정확한 클릭 이벤트를 가로 챌 수 있습니까?
하, 하, TargetType과 스타일을 사용하는 생각하지 않았다. 감사! 그것은 작동합니다 (참고로 두 번째 줄은 당연히입니다). 즐거운 휴일! –
Jeankes