Wpf - Невозможно преобразовать MenuItem в список? - PullRequest
5 голосов
/ 20 декабря 2010

Я получаю очень странное исключение. Я получаю исключение:

"'Set connectionId threw an exception.' Line number '26' and line position '34'."

Когда я смотрю на Внутреннее Исключение, я получаю:

"Unable to cast object of type 'System.Windows.Controls.MenuItem' to type 'System.Windows.Controls.ListBox'."

Я сузил причину исключения до MenuItem в стиле TreeViewItem, содержащемся в этом 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>

Исключение возникает только тогда, когда MenuItem имеет обработчик события щелчка и генерируется, даже если обработчик события щелчка не содержит кода.

Ответы [ 4 ]

15 голосов
/ 20 декабря 2010

У меня такое же исключение, как и у вас.Если присмотреться к коду, вы почувствуете, что вы получите

«Событие« Щелчок »не может быть указано для тега цели в стиле. Вместо этого используйте EventSetter».

Я не уверен, почему это не применимо здесь.
В любом случае, использование EventSetter работает

<Setter Property="ContextMenu">
    <Setter.Value>
        <ContextMenu>
            <MenuItem Name="AddProjectElementMenuItem" Header="Add">
                <MenuItem.Style>
                    <Style TargetType="MenuItem">
                        <EventSetter Event="Click" Handler="AddProjectElementMenuItem_Click"/>
                    </Style>
                </MenuItem.Style>
            </MenuItem>
        </ContextMenu>
    </Setter.Value>
</Setter>
2 голосов
/ 05 апреля 2011

Я сам столкнулся с этой странной ситуацией.Есть простой способ преодолеть это, вы должны очистить и перестроить проект, и исключение исчезнет.


Надеюсь, это поможет.

0 голосов
/ 21 июня 2017

Я столкнулся с этой ошибкой и обнаружил, что я поместил тег за пределами <MyApp:AppPage.Resources></MyApp:AppPage.Resources>, то есть я знаю, что он должен быть внутри него, но я не заметил, что закрывающий тег уже был вызван до моего тега контекстного меню.Я думал, что все еще был внутри.Я просто переместил его перед закрывающим тегом, и он работал как положено.

0 голосов
/ 20 декабря 2010

Я скопировал твой код, и он работает для меня.Вы уверены, что отправленный вами код вызывает проблему?

Вместо того, чтобы помещать MenuItem в содержимое ContextMenu, вложите его в ContextMenu.Items:

<ListBox.ContextMenu>
    <ContextMenu>
        <ContextMenu.Items>
            <MenuItem Name="AddProjectElementMenuItem"></MenuItem>
        </ContextMenu.Items>
    </ContextMenu>
</ListBox.ContextMenu>a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...