标签: contextmenu

如何在WPF上下文菜单项单击事件处理程序中引用右键单击的对象?

在WPF应用程序中,有一个Grid包含许多对象(它们来自自定义控件).我想使用上下文菜单对每个操作执行一些操作:

   <Grid.ContextMenu>
     <ContextMenu>
       <MenuItem  Name="EditStatusCm" Header="Change status" Click="EditStatusCm_Click"/>
     </ContextMenu>                   
   </Grid.ContextMenu> 
Run Code Online (Sandbox Code Playgroud)

但是在事件处理程序中,我无法知道哪些对象被右键单击:

    private void EditStatusCm_Click(object sender, RoutedEventArgs e)
    {
        MyCustControl SCurrent = new MyCustControl();
        MenuItem menu = sender as MenuItem;
        SCurrent = menu.DataContext as MyCustControl; // here I get a run-time error
        SCurrent.Status = MyCustControl.Status.Sixth;
    }
Run Code Online (Sandbox Code Playgroud)

在该注释行上调试器说:对象引用未设置为对象的实例.

请帮忙,我的代码有什么问题?

编辑(补充):

我尝试使用Command方法做同样的事情:

我宣布了一个DataCommands类,RoutedUICommand Requery然后使用Window.CommandBindings

<Window.CommandBindings>
  <CommandBinding Command="MyNamespace:DataCommands.Requery" Executed="RequeryCommand_Executed"></CommandBinding>
</Window.CommandBindings>
Run Code Online (Sandbox Code Playgroud)

MenuItem的XAML现在看起来像:

<Grid.ContextMenu>
 <ContextMenu>
  <MenuItem  Name="EditStatusCm" Header="Change status"  Command="MyNamespace:DataCommands.Requery"/>
 </ContextMenu>                   
</Grid.ContextMenu>
Run Code Online (Sandbox Code Playgroud)

事件处理程序如下所示:

    private void RequeryCommand_Executed(object …
Run Code Online (Sandbox Code Playgroud)

c# wpf contextmenu event-handling

10
推荐指数
2
解决办法
4万
查看次数

WPF:如何从Grid控件的所有区域打开ContextMenu

我正在尝试将ContextMenu添加到WPF中ListBox中的项目;

<ListBox.ItemTemplate>
    <DataTemplate>
       <Border>                         
             <Grid>
                <Grid.ContextMenu>
                    <ContextMenu>                                    
                       <MenuItem Header = "Menu item 1"/>
                       <MenuItem Header = "Menu item 2"/>
                       <MenuItem Header = "Menu item 3"/>
                    </ContextMenu>
                </Grid.ContextMenu>
                   ........
                   ........
             </Grid>
         </Border>
       </DataTemplate>
    </ListBox.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)

问题是ContextMenu只会在点击网格的实际上下文时打开,我希望能够通过单击列表框项目上的任意位置来打开菜单.

我应该将Grid包装在其他控件中吗?

c# wpf xaml contextmenu

10
推荐指数
2
解决办法
1万
查看次数

右键单击QPushButton上的contextMenu

对于我的应用程序,我在Qt Designer中创建了一个GUI并将其转换为python(2.6)代码.

在一些QPushButton(使用设计器创建)我想添加一个右键单击上下文菜单.菜单选项取决于应用程序状态.

如何实现这样的上下文菜单?

python qt contextmenu pyqt pyqt4

10
推荐指数
1
解决办法
1万
查看次数

无法使用Cocoa中的服务在Finder的上下文菜单中添加项目


每当我右键单击文件或文件夹时,我想在Finder的上下文菜单中添加一个项目,并且此菜单链接到我的Cocoa应用程序的方法.
我正在关注CocoaDev的示例和Apple的文档,但我无法显示该服务.
这是我的.h

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate,NSObject>

@property (assign) IBOutlet NSWindow *window;
-(void)IClicked:(NSPasteboard *)pboard 
             userData:(NSString *)data
                error:(NSString **)error;

@end
Run Code Online (Sandbox Code Playgroud)

.M

#import "AppDelegate.h"

@implementation AppDelegate
@synthesize window = _window;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [NSApp setServicesProvider:self];
}

- (void)IClicked:(NSPasteboard *)pboard userData:(NSString *)data error:(NSString **)error
{
    NSLog(@"I clicked");
}

@end
Run Code Online (Sandbox Code Playgroud)

和我的Application-plist.info的摘录:

<key>NSServices</key>
<array>
    <dict>
        <key>NSKeyEquivalent</key>
        <dict>
            <key>default</key>
            <string>E</string>
        </dict>
        <key>NSMenuItem</key>
        <dict>
            <key>default</key>
            <string>My Application</string>
        </dict>
        <key>NSMessage</key>
        <string>IClicked</string>
        <key>NSPortName</key>
        <string>TestService</string>
        <key>NSSendFileTypes</key>
        <array>
            <string>public.item</string>
        </array>
        <key>NSSendTypes</key>
        <array>
            <string>NSPasteboardTypeString</string>
        </array>
        <key>NSRequiredContext</key>
        <dict>
            <key>NSServiceCategory</key> …
Run Code Online (Sandbox Code Playgroud)

macos service cocoa finder contextmenu

10
推荐指数
1
解决办法
1865
查看次数

Text DFM上下文菜单选项的含义是什么?

当您右键单击Delphi表单时,您将获得弹出上下文菜单.底部选项是Text DFM.可以选中或不选中此选项.选中或取消选中此选项时的含义是什么?

在此输入图像描述

delphi contextmenu dfm

10
推荐指数
1
解决办法
2763
查看次数

从上下文菜单中缺少"使用IDLE编辑"选项

我安装了随ArcGIS 10.2.2安装的Python 2.7.5.当我第一次右键单击我之前编写的.py脚本时,它在上下文菜单中列出了"使用IDLE编辑"选项.但是,当我右键单击.py文件时,不再显示此选项.

我已经阅读了很多关于这个问题的线程,并尝试了其中的一些,例如修改/删除注册表项,然后重新安装/修复软件.我现在对使用IDE不感兴趣,尽管很多人会很高兴知道我打算稍后使用IDE.现在,目的是解决问题,而不是避免和解决它.

我感谢我过去从在线社区获得的帮助,我相信有人会为我找到解决方案.

如何在上下文菜单中返回"使用IDLE编辑"?

python contextmenu edit python-idle

10
推荐指数
3
解决办法
3万
查看次数

如何通过Google Chrome上下文菜单获取右键单击的元素?

我在Google Chrome中创建了一个上下文菜单项,如下所示:

chrome.contextMenus.create({
 "title":"My Context Menu Item", 
 "contexts":["editable"], 
 "onclick": onClick
});
Run Code Online (Sandbox Code Playgroud)

onClick回调接收两个参数:一个OnClickInfo对象和一个标签对象.这两个对象似乎都不包含对调用上下文菜单时右键单击的DOM元素的引用.我有console.logged这两个对象但在任何地方都没有看到对目标元素的任何引用.

期望的结果:

  • 用户右键单击可编辑元素
  • 用户单击我的上下文菜单项
  • onClick回调中,让我的扩展名搜索相对于目标右键单击元素的父"form"元素

就目前而言,它看起来并不像Chrome提供对目标元素的任何引用.有没有人找到解决这个限制的方法?

google-chrome element contextmenu

9
推荐指数
1
解决办法
2092
查看次数

MVVM中的ContextMenu

我想将contextmenu绑定到命令列表.

<Grid.ContextMenu>
    <ContextMenu ItemsSource="{Binding ItemContextCommands, Converter={StaticResource commandToStringConverter}}">
            <ContextMenu.ItemTemplate >
                    <DataTemplate DataType="MenuItem">
                            <MenuItem Command="{Binding}"></MenuItem>
                        </DataTemplate>
                </ContextMenu.ItemTemplate>
        </ContextMenu>
</Grid.ContextMenu>
Run Code Online (Sandbox Code Playgroud)

commandToStringConverter简单的命令列表转换为字符串调用列表ToString()列表中的每个命令.

我怎样才能实现Command每个MenuItem被称为?

c# wpf binding contextmenu mvvm

9
推荐指数
3
解决办法
1万
查看次数

在WPF中自定义上下文菜单

我在这里有一个项目,我需要在我的WPF应用程序中自定义上下文菜单,其中一个按钮将放置在所有菜单项的底部.

但是,如果我要通过XAML添加按钮,它将在上下文菜单中显示为集合中的另一个项目,并且鼠标悬停突出显示将对其起作用.

我希望将上下文菜单调整为类似网格的样式,以便我可以自定义它下面的样式.

知道如何实现这一目标(最好是在XAML中)?

wpf xaml contextmenu

9
推荐指数
2
解决办法
2万
查看次数

Fragment中的Context菜单使用来自不同Fragment的ListView:registerForContextMenu(getListView())

我试过寻找解决方案,但没有发现任何符合我情况的解决方案.我有一个MainActivity,它扩展了FragmentActivity和多个ListFragments.我使用PagerSlidingTabStrip库作为slidetabs和一个ViewPager.片段没有XML布局,它们只是ListFragments,它返回ListView,因此不需要布局.

它是一个音板应用程序,长按一个列表项,允许用户将声音文件设置为铃声,通知或警报,或保存到SD卡.

现在,所有片段加载自己的数据就好了.一切似乎都没问题,但是,当我在后台加载的Fragment上使用上下文菜单时,似乎是使用了在它之前加载的第一个或前一个片段中的ListView,它是在创建它时可见的.

我的意思是,说我的MainActivity开始,它加载FragmentA,并在后台FragmentB也被预加载.

在onActivityCreated方法中,对于两个Fragments,它使用registerForContextMenu(getListView()).

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    // Data loading etc

    MyAdapter adapter = new MyAdapter(getActivity(),
            R.layout.data_row, data);
    setListAdapter(adapter);

    registerForContextMenu(getListView());
}
Run Code Online (Sandbox Code Playgroud)

但似乎正在发生的事情是FragmentB调用了registerForContextMenu(getListView()),它似乎采用了当前活动的ListView,这是FragmentA的列表.

所以,假设我选择从上下文菜单中保存文件.我长按了FragmentB的第一项,但它试图保存FragmentA的第一项.如果我只是点击列表项,它会像您期望的那样播放它自己的声音,但是上下文菜单命令使用预加载时可见的片段列表.

这是onCreateContextMenu.注意,此时它使用上下文菜单Title中的正确项Title.

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
    menu.setHeaderTitle(data.get(info.position).getDataName());
    MenuInflater inflater = this.getActivity().getMenuInflater();
    inflater.inflate(R.menu.context_menu, menu);
}
Run Code Online (Sandbox Code Playgroud)

这是onContextItemSelected.

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    int dataID = data.get(info.position).getDataID();
    String dataName = data.get(info.position).getDataName();

    Activity activity = getActivity();
    if(activity instanceof …
Run Code Online (Sandbox Code Playgroud)

android listview contextmenu fragment android-fragments

9
推荐指数
1
解决办法
7664
查看次数