如何获取上下文菜单项的父名称?

时间:2011-02-24 11:13:02

标签: windows-phone-7 contextmenu sender

我正在尝试获取上下文菜单项的父名称。

所以我在menuItem_click上尝试了类似的东西:

Button clikance = (Button)sender;
string ladyGaga = Convert.ToString(clikance.Content);

但它没有用(无效的强制转换异常)。 thx任何帮助

3 个答案:

答案 0 :(得分:2)

我使用不同的方法获取上下文菜单的发件人按钮。我在“hold_click”

上发了一个事件

我在公共字符串中取回按钮的内容

private void GestureListener_DoubleTap(object sender, GestureEventArgs e)
{
    Button clikance = (Button)sender;
    ButtonEnvoyeur = Convert.ToString(clikance.Content);
}

答案 1 :(得分:1)

如果您在引发异常的位置查看调试器,您会发现发件人不是Button,因此尝试对{进行显式转换{1}}显然会抛出Button

您可以使用InvalidCastException从实际发件人向上走到树VisualTreeHelper元素:

Button

更新:在您的实例中,发件人VisualTreeHelper.GetParent((sender as DependencyObject));中的MenuItem。您可以使用ContextMenuContextMenu转到父MenuItem,但不幸的是,VisualTreeHelper不会公开任何允许您访问所有者的公开成员; ContextMenu属性是内部属性。您可以获取Toolkit的源代码,并将Owner属性公开为publi,或使用完全不同的方法。

您是否考虑过使用MVVM框架(例如MVVM Light)将命令连接到这些上下文菜单项?您当前的方法非常脆弱,一旦您更改了可视树,就会中断。如果使用了命令,则可以通过命令参数传递处理所需的任何其他信息。

答案 2 :(得分:1)

使用MenuItem的Tag属性检索Button:

// Object creation
Button myButtonWithContextMenu = new Button();
ContextMenu contextMenu = new ContextMenu();
MenuItem aMenuItem = new MenuItem 
{
    Header = "some action",
    Tag = myButtonWithContextMenu, // tag contains the button
};

// Events handler
aMenuItem.Click += new RoutedEventHandler(itemClick);

private void itemClick(object sender, RoutedEventArgs e)
{
    // Sender is the MenuItem
    MenuItem menuItem = sender as MenuItem;

    // Retrieve button from tag
    Button myButtonWithContextMenu = menuItem.Tag as Button;
    (...)         
}

亚历。