我已经了解了如何通过向注册表添加密钥,在Windows资源管理器上向文件添加右键单击上下文菜单项.即我可以在资源管理器中右键单击文件并针对该文件运行自定义应用程序.
我想对一个文件夹做同样的事情,但还没有找到办法(尚).我看到有关创建/编写自定义上下文菜单处理程序的文章,但我宁愿不去那里.
我在这里找到了一篇关于如何将级联上下文菜单项添加到桌面和资源管理器中的"计算机"的文章,但这对任何文件夹都不起作用.
我希望能够将我的自定义应用程序添加到上下文菜单中,并使其适用于文件和文件夹.有没有办法在不编写上下文菜单处理程序的情况下执行此操作?
我在网上看到了一个示例,展示了如何自定义jstree右键单击上下文菜单的外观(使用contextmenu插件).
例如,允许我的用户删除"文档"而不删除"文件夹"(通过隐藏文件夹的上下文菜单中的"删除"选项).
现在我找不到那个例子.谁能指出我正确的方向?官方文档没有真正帮助.
编辑:
由于我希望默认的上下文菜单只有一个或两个小的更改,我宁愿不重新创建整个菜单(当然,如果这是唯一的方法我会的).我想做的是这样的事情:
"contextmenu" : {
items: {
"ccp" : false,
"create" : {
// The item label
"label" : "Create",
// The function to execute upon a click
"action": function (obj) { this.create(obj); },
"_disabled": function (obj) {
alert("obj=" + obj);
return "default" != obj.attr('rel');
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用 - 创建项目始终被禁用(警报永远不会出现).
如何找出树列表中的哪个节点已激活上下文菜单?例如,右键单击节点并从菜单中选择一个选项.
我无法使用TreeViews的SelectedNode属性,因为该节点只是右键单击而未选中.
我目前正在尝试调整我的应用程序以使用"适用于Android v4的兼容性库",以便为Android 1.6用户提供使用片段的好处.
上下文菜单的实现似乎很棘手:
对于onCreateContextMenu(),这非常有效.上下文菜单从资源文件中膨胀,并根据所选项目进行略微修改(基于listView ...即使片段不是ListFragment).
选择上下文菜单项时会发生此问题. 从第一个添加的片段开始,为所有当前存在的片段调用onContextItemSelected().
在我的例子中,片段用于显示文件夹结构的内容.当打开子文件夹片段的上下文菜单并选择菜单项时,首先在上层调用onContextItemSelected()(取决于此时允许/可见的片段数).
现在,我使用活动级别上的字段的变通方法,该字段包含调用其onCreateContextMenu()的最后一个片段的标记.这样,当存储的标记与getTag()不同时,我可以在onContextItemSelected()的开头调用"return super.onContextItemSelected(item)" .但这种方法对我来说有点脏.
为什么在所有片段上调用onContextItemSelected()?而不只是一个调用onCreateContextMenu()的人?
处理这个问题最优雅的方法是什么?
android contextmenu android-fragments android-support-library
是否有人注意到带有ElementName的Bindings无法正确解析MenuItem对象中包含的ContextMenu对象?看看这个样本:
<Window x:Class="EmptyWPF.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300"
x:Name="window">
<Grid x:Name="grid" Background="Wheat">
<Grid.ContextMenu>
<ContextMenu x:Name="menu">
<MenuItem x:Name="menuItem" Header="Window" Tag="{Binding ElementName=window}" Click="MenuItem_Click"/>
<MenuItem Header="Grid" Tag="{Binding ElementName=grid}" Click="MenuItem_Click"/>
<MenuItem Header="Menu" Tag="{Binding ElementName=menu}" Click="MenuItem_Click"/>
<MenuItem Header="Menu Item" Tag="{Binding ElementName=menuItem}" Click="MenuItem_Click"/>
</ContextMenu>
</Grid.ContextMenu>
<Button Content="Menu"
HorizontalAlignment="Center" VerticalAlignment="Center"
Click="MenuItem_Click" Tag="{Binding ElementName=menu}"/>
<Menu HorizontalAlignment="Center" VerticalAlignment="Bottom">
<MenuItem x:Name="anotherMenuItem" Header="Window" Tag="{Binding ElementName=window}" Click="MenuItem_Click"/>
<MenuItem Header="Grid" Tag="{Binding ElementName=grid}" Click="MenuItem_Click"/>
<MenuItem Header="Menu" Tag="{Binding ElementName=menu}" Click="MenuItem_Click"/>
<MenuItem Header="Menu Item" Tag="{Binding ElementName=anotherMenuItem}" Click="MenuItem_Click"/>
</Menu>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
除了ContextMenu中包含的绑定之外,所有绑定都很有效.它们在运行时将错误输出到"输出"窗口.
有谁知道任何工作?这里发生了什么?
我的DataGridView中有几列,并且我的行中有数据.我在这里看到了一些解决方案,但我无法将它们结合起来!
只需右键单击一行,它就会选择整行,并显示一个菜单,其中包含删除行的选项,当选择该选项时,它将删除该行.
我做了一些尝试,但没有一个工作,它看起来很乱.我该怎么办?
我有一个ListView,允许用户长按项目以获取上下文菜单.我遇到的问题是确定ListItem他们长期压迫的问题.我试过这样做:
myListView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
@Override public void onCreateContextMenu(ContextMenu menu, final View v, ContextMenuInfo menuInfo) {
menu.add("Make Toast")
.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override public boolean onMenuItemClick(MenuItem item) {
String toastText = "You clicked position " + ((ListView)v).getSelectedItemPosition();
Toast.makeText(DisplayScheduleActivity.this, toastText, Toast.LENGTH_SHORT).show();
return true;
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
但它只是挂起,直到ANR弹出.我怀疑创建菜单后ListItem不再选择.
看起来您可以监控点击或长按,然后在那里记录点击的项目:
mArrivalsList.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id) {
// record position/id/whatever here
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
但这对我来说感觉很重要.有没有人有更好的解决方案呢?
默认情况下,菜单项在无法执行命令时会被禁用(CanExecute = false).根据CanExecute方法使菜单项可见/折叠的最简单方法是什么?
谢谢
为方便起见,这里的解决方案是:使用"Boolean to Visibility"转换器将visibility属性绑定到IsEnabled属性.
源编辑器,项目项和解决方案项的右键单击上下文菜单变得非常漫长,其中两个甚至现在在我的1680x1050屏幕上滚动.
有没有办法让我隐藏这些菜单上的项目,即使我必须向Visual Studio宏系统添加一个事件并手动查找和隐藏它们?
这是一些例子,我从不使用过这些物品中的许多物品:

Edit1:当前答案+评论建议我应该使用工具栏上下文菜单中的Customize菜单项,转到第二个选项卡,Commands,然后使用Context Menus单选按钮并在那里找到相关菜单.
这里有3个,评论建议:

如你所见,它们都是空的.
编辑2:单击该对话框中的"全部重置"按钮后,对于"解决方案"和"项目"菜单,我在对话框中获得了可以编辑的项目,但更改并未影响项目或解决方案上的实际上下文菜单文件.此外,重新启动Visual Studio后,这两个对话框的内容再次为空.
我开发了一个应用程序,使用窗口的上下文菜单加载图像(右键单击文件),暂时正在工作,但是reg键是打开的
HKEY_CLASSES_ROOT\*
Run Code Online (Sandbox Code Playgroud)
它适用于所有文件.
我希望上下文菜单中的菜单项只能显示.jpg文件.
我能做到的是什么?我应该使用哪些注册表项?
提前致谢.
contextmenu ×10
android ×2
c# ×2
right-click ×2
wpf ×2
command ×1
data-binding ×1
datagridview ×1
elementname ×1
explorer ×1
jquery ×1
jstree ×1
listview ×1
menuitem ×1
registry ×1
select ×1
treeview ×1
windows-xp ×1
winforms ×1