I am getting a very strange exception. I get the exception:
"'Set connectionId threw an exception.' Line number '26' and line position '34'."
When I look at the Inner Exception I get:
"Unable to cast object of type 'System.Windows.Controls.MenuItem' to type 'System.Windows.Controls.ListBox'."
I have narrowed the cause of the exception to the MenuItem
in the TreeViewItem style contained in this TreeView
:
<TreeView x:Name="ProjectElementTreeView" ItemsSource="{Binding ProjectElementCollection}" DisplayMemberPath="Name" Padding="0" SelectedItemChanged="ProjectElementTreeView_SelectedItemChanged" GotKeyboardFocus="ProjectElementTreeView_GotKeyboardFocus">
<TreeView.Resources>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="HorizontalAlignment" Value="Left" />
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Name="AddProjectElementMenuItem" Header="Add" Click="AddProjectElementMenuItem_Click"/>
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</TreeView.Resources>
</TreeView>
The exception only occurs when the MenuItem
has a click event handler and is thrown even when the click event handler does not contain any code.
I ran into this error and found out that I put the tagging outside
<MyApp:AppPage.Resources></MyApp:AppPage.Resources>
, i mean I know it has to be inside it but I did not notice that the closing tag was already called before my context menu tag. I thought I was still inside it. I just moved it before the closing tag and it worked as expected.I've copied your code and it works for me. Are you sure the code you posted is causing the problem?
Instead of placing the MenuItem in the content of ContextMenu, nest it under ContextMenu.Items:
I got the same exception as you did. After looking closer at the code, this feels like a situation where you would get
I'm not sure why that doesn't apply here.
Anyway, using an EventSetter works
Fredrik's answer explains what's actually causing this, I think. But here's an alternate solution.
You can also work around the problem by declaring the
ContextMenu
as a separate resource outside of theStyle
:I had to face this weird situation myself. There is an easy way to get over it, you have to clean and rebuild the project and the exception will go away.
Hope this helps.