嗨我在标签上添加了一个上下文菜单(c#,winforms).我的上下文菜单有3个子项,我想在我点击任何一个上下文菜单项时显示标签文本.
提前致谢
我的View Model上的Context Menu命令有些困难.
我正在为View Model中的每个命令实现ICommand接口,然后在View(MainWindow)的资源中创建ContextMenu,并使用MVVMToolkit中的CommandReference访问当前的DataContext(ViewModel)命令.
当我调试应用程序时,似乎除了创建窗口之外,没有调用命令上的CanExecute方法,因此我的Context MenuItems没有像我期望的那样启用或禁用.
我已经制作了一个简单的样本(附在这里),它表明了我的实际应用并总结如下.任何帮助将不胜感激!
这是ViewModel
namespace WpfCommandTest
{
public class MainWindowViewModel
{
private List<string> data = new List<string>{ "One", "Two", "Three" };
// This is to simplify this example - normally we would link to
// Domain Model properties
public List<string> TestData
{
get { return data; }
set { data = value; }
}
// Bound Property for listview
public string SelectedItem { get; set; }
// Command to execute
public ICommand DisplayValue …Run Code Online (Sandbox Code Playgroud) document.addEventListener('contextmenu', function (e) {
e.preventDefault()
e.stopPropagation()
e.returnValue = false
e.cancleBubble = true
})
Run Code Online (Sandbox Code Playgroud)
没门?
编辑:document.oncontextmenu = null不起作用.
PS我不能拥有监听器功能的引用,因为我不是阻止上下文菜单的站点的所有者.
右键单击菜单,我的意思是:我真的不知道它叫什么,但我希望它的右键菜单.
当我谷歌查询这个问题的标题时,我什么都没得到.一些教程,显示如何将.exe添加到该列表等但我正在寻找一些教程,将教我如何处理该数据,右键菜单将返回我,等等.但遗憾的是,我发现没有.所以我在这里,问......
如何将我的程序添加到该列表中,当我执行它返回给我的内容时,是否有任何相关的教程?
当我查找它时,它们将其列为具有.Checked属性.但是在Visual Studio和msdn上,它都没有列出任何Checked属性的孩子.
ContextMenuStrip menu = new ContextMenuStrip ( );
var menuItem = menu.Items.Add ( "CheckedItem" );
//menuItem.Checked?
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
我有一个ListView,它显示一个字符串值列表.我想为列表中的每个项目添加上下文菜单条目以删除所选项目.我的XAML看起来像这样:
<ListView x:Name="itemsListView" ItemsSource="{Binding MyItems}">
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Header="Remove"
Command="{Binding RemoveItem}"
CommandParameter="{Binding ElementName=itemsListView, Path=SelectedItem}" />
</ContextMenu>
</ListView.ContextMenu>
</ListView>
Run Code Online (Sandbox Code Playgroud)
问题是该CommandParameter值始终为null.我添加了一个额外的按钮来删除所选项目以检查我的命令是否有效.该按钮具有完全相同的绑定,并通过按钮删除项目工作.按钮看起来像这样:
<Button Content="Remove selected item"
Command="{Binding RemoveItem}"
CommandParameter="{Binding ElementName=itemsListView, Path=SelectedItem}"/>
Run Code Online (Sandbox Code Playgroud)
该命令如下所示:
private ICommand _removeItem;
public ICommand RemoveItem
{
get { return _removeItem ?? (_removeItem = new RelayCommand(p => RemoveItemCommand((string)p))); }
}
private void RemoveItemCommand(string item)
{
if(!string.IsNullOrEmpty(item))
MyItems.Remove(item);
}
Run Code Online (Sandbox Code Playgroud)
打开上下文菜单时所选项目为空的任何想法?也许是listview的焦点问题?
我想添加一个右键菜单来删除,重命名或打开QTAbleView单元格中每个单元格中的图像,我试过,发现每个人都试图将菜单添加到tableview中的标题,我试过下面但是看起来似乎不在下面的代码中工作..
class GalleryUi(QtGui.QTableView):
""" Class contains the methods that forms the
UI of Image galery
"""
def __init__(self, imagesPathLst=None, parent=None):
super(GalleryUi, self).__init__(parent)
self.__sw = QtGui.QDesktopWidget().screenGeometry(self).width()
self.__sh = QtGui.QDesktopWidget().screenGeometry(self).height()
self.__animRate = 1200
self._imagesPathLst = imagesPathLst
self._thumb_width = 200
self._thumb_height = self._thumb_width + 20
self.setUpWindow(initiate=True)
self._startControlBar()
self._connections()
def contextMenuEvent(self, event):
index = self.indexAt(event.pos())
menu = QtGui.QMenu()
renameAction = QtGui.QAction('Exit', self)
renameAction.triggered.connect(self.close)
self.menu.addAction(renameAction)
self.menu.popup(QtGui.QCursor.pos())
def closeEvent(self,event):
# in case gallery is launched by Slideshow this is not needed
if hasattr(self, 'bar'):
self.bar.close()
def …Run Code Online (Sandbox Code Playgroud) 我的菜单项变得更大,所以我想将它们分组并制作一个分隔线来分隔每个组.我现在应该怎么做 ?
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!--group1-->
<item
android:id="@+id/action_addtag"
android:title="@string/add_hashtag_string"
app:showAsAction="never" />
<item
android:id="@+id/action_block_list"
android:title="Block"
app:showAsAction="never" />
<item
android:id="@+id/action_report_list"
android:title="Report"
app:showAsAction="never" />
<!--group2-->
<item
android:id="@+id/terms"
android:title="Terms"
app:showAsAction="never" />
<item
android:id="@+id/feedback"
android:title="FeedBack"
app:showAsAction="never" />
<!--group3-->
<item
android:id="@+id/action_setting"
android:title="Setting"
app:showAsAction="never" />
</menu>
Run Code Online (Sandbox Code Playgroud) 网络连接快捷方式(以太网,Wi-Fi等)具有不同的上下文菜单,具体取决于连接状态(已连接/已断开连接).我使用以下代码(Delphi)来检索和显示此菜单.
var pidl, child: PItemIdList;
pFolder: IShellFolder;
pMenu: IContextMenu;
menu: HMENU;
begin
SHParseDisplayName(PChar('%USERPROFILE%\Desktop\eth0.lnk'), nil, pidl, 0, PDWORD(nil)^);
SHBindToParent(pidl, IID_IShellFolder, Pointer(pFolder), child);
CoTaskMemFree(pidl);
pFolder.GetUIObjectOf(0, 1, child, IID_IContextMenu, nil, pMenu);
menu := CreatePopupMenu;
pMenu.QueryContextMenu(menu, 0, 0, $7fff, CMF_NORMAL);
TrackPopupMenuEx(menu, TPM_LEFTBUTTON, 0, 0, Handle, nil);
DestroyMenu(menu);
end;
Run Code Online (Sandbox Code Playgroud)
但在改变连接状态后,我不断收到旧菜单.并重新启动我的应用程序后.有时重启我的应用程序后,我得到正确的菜单.
为什么会发生以及如何解决?
操作系统:32位和64位Windows 7/8/10
C++代码:
PIDLIST_ABSOLUTE pidl;
if SUCCEEDED(SHParseDisplayName(L"%USERPROFILE%\\Desktop\\eth0.lnk", NULL, &pidl, 0, NULL))
{
PCUITEMID_CHILD child;
CComQIPtr<IShellFolder> pFolder;
if SUCCEEDED(SHBindToParent(pidl, IID_IShellFolder, (void**)&pFolder, &child))
{
CComQIPtr<IContextMenu> pMenu;
if SUCCEEDED(pFolder->GetUIObjectOf(0, 1, &child, IID_IContextMenu, NULL, (void**)&pMenu))
{
HMENU menu …Run Code Online (Sandbox Code Playgroud) 我想在我的上下文菜单(Windows 7和10)上添加一个选项,当我右键单击该文件夹时,将Anaconda Prompt打开到文件位置,但我找不到正确的注册表项.
这是我所知道的怎么做:
我无法弄清楚的是如何将这些步骤组合到一个注册表项中,这样我就可以打开一个Anaconda Prompt然后在该提示符下cd到当前文件夹.但也许我正以错误的方式接近这一点.
来自互联网大师的帮助表示赞赏.
contextmenu ×10
c# ×3
windows ×2
winforms ×2
wpf ×2
.net ×1
anaconda ×1
android ×1
binding ×1
c++ ×1
command ×1
delphi ×1
events ×1
icommand ×1
javascript ×1
listview ×1
menu ×1
menuitem ×1
pyqt ×1
python-2.7 ×1
qtableview ×1
registrykey ×1
right-click ×1
winapi ×1