【问题标题】:Get MenuItem Name by Click Event通过点击事件获取 MenuItem 名称
【发布时间】:2017-10-19 09:42:19
【问题描述】:

我想通过点击获得MenuItem 名称。

据我所知,我的 Menu 里面有两个 MenuItems(如您所见)。

XAML:

<DockPanel Margin="0,-17,0,0">
    <Menu DockPanel.Dock="Top">
        <MenuItem Header="_Optionen">
            <MenuItem Name="MI_1" Header="MI 1" Click="Set_MI"/>
            <MenuItem Name="MI_2" Header="MI 2" Click="Set_MI"/>
        </MenuItem>
    </Menu>
    <StackPanel></StackPanel>
</DockPanel>

C#:

private void Set_MI(object sender, RoutedEventArgs e)
{
    var MI = sender as MenuItem;
    switch (MI.Name)

我尝试将object sender 转换为MenuItem,这会引发此错误:

错误显示在 Switch (MI.Name)

System.NullReferenceException:“对象引用未设置为对象实例。”

“MI”为“空”

顺便说一句。我不知道ToolStripMenuItem 是/意味着什么。

是否有任何适当的解决方案可以将object sender 转换为MenuItem / 通过单击MenuItem 获取名称?

【问题讨论】:

  • 你的意思是“不工作”?它抛出异常,给出一些错误,而不是预期值?
  • WPF 有MenuItem,WinForms 有ToolStripMenuItem。您有 WPF 的标签,但在代码中使用 ToolStripMenuItem。请先澄清这一点。另外,“不要为我工作”太含糊了,你有错误吗?
  • 如果我的怀疑是真的并且这是一个简单的错误演员案例,只需尝试var MI = sender as MenuItem; switch (MI.Name)
  • 您在哪里为项目设置名称?有 3 种可能性 - 名称、标签、文本。看看这个属性,也许你会在那里找到你的名字
  • @KeyurPATEL 它抛出了同样的异常:System.nullreferenceexeption

标签: c# wpf menu nullreferenceexception menuitem


【解决方案1】:

确保您转换为 System.Windows.Controls.MenuItem 而不是其他类型的自定义 MenuItem 类型:

private void Set_Speicherpfade(object sender, RoutedEventArgs e)
{
    var MI = sender as System.Windows.Controls.MenuItem;
    if (MI != null)
    {
        switch (MI.Name)
        {
            ...
        }
    }
}

【讨论】:

  • 它不起作用,ist sais evertime MI = null。而且我现在没有 MenuItem 的种类,我在 wpf 中创建了它,所以我认为它是一个 Windows 控件。
  • 如果事件处理程序实际上附加到 MenuItem,我发布的代码确实有效。如果通过在事件处理程序中放置断点来调试代码,那么发送方是什么类型?你真的尝试过我的代码吗?
  • 我必须承认,我把它放在了我的 Combobox 的磨损处,但现在它工作正常.-。对不起,但感谢您的努力
  • 能否请您删除此答案,以便我可以删除我的问题?由于一位用户投了反对票,我不能再写任何问题了...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多