저는 C#을 사용하고 있으며 객체 목록을 가지고 있으며 컨텍스트 메뉴에 모든 객체를 표시하려고합니다. 각 객체는 MenuItem
으로 표시됩니다.ListItem에 MenuItem을 동적으로 연결합니다.
하나의 MenuItem을 클릭하면 MenuItem_Click()
함수에서 연결된 객체를 참조하려고합니다. Tag
속성을 사용 :
List<MyObject> MyList = new List<MyObject>();
ContextMenu menu = new ContextMenu();
foreach(MyObject o in MyList)
{
MenuItem item = new MenuItem();
item.Header = o.Name;
item.Click += MenuItem_Click;
menu.Items.add(item);
}
menu.IsOpen=true;
void MenuItem_Click(object sender, RoutedEventArgs e){
// Assume the 5th MenuItem is clicked, I need to refer to the 5th object in MyList
// how to do it?
}
투표 결과에도 불구하고,이 솔루션은 그가 제공 한 프레임 워크 내 OP의 질문에 실제로 대답합니다 *. – slugster
내 경우 완벽하게 작동합니다. 왜 "더러운"해킹으로 간주됩니다 궁금하네요 ... 태그 속성이 이런 일을해야 아닌가요? – LazNiko
@Laz - 태그는 범용 속성으로 존재하며 AFAIK는 VB의 컨트롤에 도입 된 이후로 그런 용도로 사용되었습니다. 개인적으로 선호하는 메서드가 아니므로 ListView를 사용하여 데이터 바인딩을 사용하고 각 TemplateItem을 MenuItem으로 지정한 다음 Command (바인딩 된 MyObject를 CommandParameter로 전달)를 대상으로 지정합니다. 시간이 지나면 오늘 나중에 샘플을 올릴 수 있습니다. – slugster