Я хотел контекстное меню для моих ListBoxItems.Итак, я создал это:
<ListBox Name="listBoxName">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding UserName}" />
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="View" Name="MenuItemView" />
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
Это прекрасно работает.У меня есть контекстное меню для всех элементов, но если я хочу добавить обработчик события click к элементу меню, например:
<MenuItem Header="View" Name="MenuItemView" Click="MenuItemView_Click" />
Я получаю исключение XamlParseException при создании окна.
InnerException: Объект System.Windows.Controls.MenuItem не может быть преобразован в тип System.Windows.Controls.Grid
. Он выдает только исключение, если я добавляю обработчик событий.Метод события пуст.
Редактировать: трассировка InnerException:
в Chat_Client.ChatWindow.System.Windows.Markup.IComponentConnector.Connect (Int32 connectionId, Object target)в c: \ XXX \ Chat_Client \ ChatWindow.xaml: строка 19.
в MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetConnectionId (корень объекта, идентификатор подключения Int32, экземпляр объекта)
Edit2: Теперь мне нужно получить объект, на который я нажал, в контекстном меню.Сначала я попробовал это:
//MenuItem s = sender as MenuItem;
//ContextMenu cm = s.Parent as ContextMenu;
//Popup pu = cm.Parent as Popup;
//object o = pu.Parent;
Но родитель всплывающего окна нулевой.Тогда я просто получаю selectedItem из ListBox.Это работает, но нет ли способа получить ListBoxRow из контекстного меню, по которому щелкнули?