我正在尝试获取上下文菜单项的父名称。
所以我在menuItem_click上尝试了类似的东西:
Button clikance = (Button)sender;
string ladyGaga = Convert.ToString(clikance.Content);
但它没有用(无效的强制转换异常)。 thx任何帮助
答案 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
。您可以使用ContextMenu
从ContextMenu
转到父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;
(...)
}
亚历。