标签: contextmenu

C# - 在打开上下文菜单时检测是否保持SHIFT键

在我的C#应用​​程序中,我想显示一个上下文菜单,但是如果在打开上下文菜单时按住SHIFT键,我想在菜单中添加特殊选项.

我目前正在使用GetKeyStateAPI来检查SHIFT键.它在我的计算机上工作正常,但是使用非英语Windows的用户表示它根本不起作用.

我还读到在Win32 API中打开上下文菜单时,菜单中应该显示一个标志EXTENDEDVERBS.在C#中EventArgs,Opening事件不包含(据我所知)一个属性指示EXTENDEDVERBS或是否按下任何修改键.

这是我现在在" Opening"事件中使用的代码:

// SHIFT KEY is being held down
if (Convert.ToBoolean(GetKeyState(0x10) & 0x1000))
{
     _menuStrip.Items.Add(new ToolStripSeparator());

     ToolStripMenuItem log = new ToolStripMenuItem("Enable Debug Logging");
     log.Click += new EventHandler(log_Click);
     log.Checked = Settings.Setting.EnableDebugLogging;
     _menuStrip.Items.Add(log);
 }
Run Code Online (Sandbox Code Playgroud)

如果GetKeyState是正确的方法,我的代码是否正确检测到按下了SHIFT键?

c# keyboard contextmenu

39
推荐指数
4
解决办法
6万
查看次数

如何在 SwiftUI 中配置用于删除和禁用的 ContextMenu 按钮?

我试图在 中配置按钮contextMenu,但它不起作用。

Text("A label that have context menu")
    .contextMenu {
        Button(action: {
            // remove it
        }) {
            Text("Remove")
                .foregroundColor(.red) // Not working
            Image(systemName: "trash")
        }.disabled(true) // Not working
    }
Run Code Online (Sandbox Code Playgroud)

我拥有的:

 不工作的样子

我在寻找什么:(删除呼叫按钮)

演示

我会创建一个UIAction类似以下的内容,UIKit但我找不到任何修饰符或无论如何将其带到SwiftUI

let delete = UIAction(title: "Remove", image: UIImage(systemName: "trash"), attributes: .destructive) { action in
    // remove it
}
Run Code Online (Sandbox Code Playgroud)

contextmenu swift ios13 swiftui

35
推荐指数
2
解决办法
4248
查看次数

如何检索已执行上下文菜单的元素

我正在尝试编写一个google chrome扩展,我在其中使用了contextmenu.此上下文菜单仅适用于可编辑元素(例如输入文本).单击并执行contextmenu时,我想在回调函数中检索已执行contextmenu的元素(输入文本),以便更新与此输入文本关联的值.

这是我的扩展的骨架:

function mycallback(info, tab) {
  // missing part that refers to the question:
  // how to retrieve elt which is assumed to be 
  // the element on which the contextMenu has been executed ?
  elt.value = "my new value"
}

var id = chrome.contextMenus.create({
        "title": "Click me",
        "contexts": ["editable"],
        "onclick": mycallback
    });
Run Code Online (Sandbox Code Playgroud)

与mycallback函数关联的参数不包含用于检索右键单击元素的有用信息.这似乎是一个已知问题(http://code.google.com/p/chromium/issues/detail?id=39507)但几个月后没有任何进展.有人知道一个解决方法:没有jquery和/或jquery?

javascript dom contextmenu google-chrome-extension

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

在android中使用带有listview的contextmenu

我正在开发一个android应用程序.我将有一个listview,并且我设置了一个上下文菜单,当listview项目被长按时出现.如何从列表视图项目中选择项目(比如listview textview中的文本)选择了一个来自contextmenu的动作,我可以处理它吗?这是一些代码:

protected void onCreate(Bundle savedInstanceState) {
    -------
    lv1 = (ListView) findViewById(R.id.listings);

    registerForContextMenu(lv1);
    lv1.setOnItemClickListener(this);

}
Run Code Online (Sandbox Code Playgroud)

和onCreateContextMenu:

public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.context_menu, menu);
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
            .getMenuInfo();
    switch (item.getItemId()) {
    case R.id.watch:
        String name = "";
        return true;
    case R.id.buy:
        return true;
    default:
        return super.onContextItemSelected(item);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想从列表项中的textview获取文本.我如何实现这一目标?

android listview contextmenu

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

WPF ContextMenu困境:如何设置ContextMenu的DataContext?

我有一些麻烦搞清楚如何设置正确的DataContext一个ContextMenu.

我有一组视图模型,他们是一个ItemsControl.每个视图模型都有一组项目,这些项目也是另一个项目的来源ItemsControl.每个项目用于绘制具有的图像ContextMenu.将MenuItemsContextMenu需要绑定到视图模型的一个命令,但是PlacementTargetContextMenu是指向单个项目.

我的Xaml看起来像这样:

<ItemsControl ItemsSource="{Binding Markers"}>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ItemsControl ItemsSource="{Binding Items}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Image>
                            <Image.ContextMenu>
                                <ContextMenu>
                                     <MenuItem Header="Edit" Command="{Binding EditCommand}" />
                                </ContextMenu>
                            </Image.ContextMenu>
                        </Image>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)

我如何设置DataContextContextMenu,以该项目的相应的父视图模型?

wpf datacontext contextmenu

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

禁用EditText上下文菜单

我正在EditText为传统的蒙古人做垂直.我通过EditText在旋转的内部嵌入一​​个略微修改的内容来成功实现它ViewGroup.我需要创建一个完全自定义的上下文菜单,因为系统不支持垂直文本,并且在旋转时也不会ViewGroup旋转.所以我想完全禁用系统上下文菜单.

请注意,这与仅仅尝试禁用复制/粘贴/等的这些问题不同:

虽然我没有在模拟器中出现上下文菜单,但我将它出现在我的Android 5.0.2小米手机中.

我试过了:

我对hacks持开放态度,但我需要它能够在各种设备上持续工作.马克·墨菲(下议院人)写了一段时间,早在回答其他用户试图做同样的事情:

我怀疑,即使你拿出一个答案,它也无法在各种设备上运行.设备制造商倾向于为EditText推出自己的"上下文菜单",从而使开发人员尝试将项目添加到该上下文菜单中.我的猜测是,试图阻止该上下文菜单会产生类似的结果.

我运气不好吗?

我现在唯一能想到的就是完全重写TextViewEditText从头开始(好吧,通过修改Android源代码).我知道其他人做了类似的事,但他的代码不是开源的.在我采取这一重大步骤之前,我想尝试在Stack Overflow上寻求更简单的解决方案.

更新:我一直在尝试修改TextView过去两天的源代码,看起来像是一个6个月的项目.这是一大堆相互关联的课程.我需要另一种解决方案,但我没有想法.

MVCE

这是我能想到的最简单的方法来重现问题.我的习惯没有必要EditText.布局有一个EditText替换默认项目Hello World的TextView.我将min API更改为11以避免处理已弃用的方法.

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EditText editText = (EditText) findViewById(R.id.edit_text);
        editText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
            @Override
            public boolean onCreateActionMode(ActionMode actionMode, Menu …
Run Code Online (Sandbox Code Playgroud)

android contextmenu android-edittext mongolian-vertical-script

31
推荐指数
4
解决办法
6178
查看次数

如何将MULTIPLE文件名传递给Context Menu Shell命令?

将单个文件名传递给上下文菜单shell命令很简单:

[HKEY_CLASSES_ROOT\*\shell\MyProgram\Command]
@="program.exe %1"
Run Code Online (Sandbox Code Playgroud)

但是,如果我选择多个文件,program.exe则会为每个这样选择的文件调用.

我想要做的只是调用program.exe一次,将当前选中的所有文件名传递给它.

这该怎么做?

windows registry shell contextmenu

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

如何将上下文菜单添加到ListBoxItem?

我有一个ListBox,我想为列表中的每个项目添加一个上下文菜单.我已经看到"解决方案"右键单击选择一个项目并禁止上下文菜单,如果在空白区域,但这个解决方案感觉很脏.

有谁知道更好的方法?

c# listbox contextmenu winforms

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

右键单击Java JTree的上下文菜单?

我正在尝试在Java JTree中实现弹出菜单.我已经对DefaultTreeCellRenderer(更改节点外观)和DefaultTreeCellEditor(创建组件以附加事件侦听器)进行了细分,因为显然DefaultTreeCellRenderer.getTreeCellRendererComponent()返回的组件不能这样做吗?).我真的不想"编辑"节点,只需在节点右键单击时弹出菜单,但这是我现在想到的唯一方法......

下面是我到目前为止的代码 - 我只想弄清楚如何捕获MouseEvents.它有点工作,但很糟糕.有什么更好的方法来完成我在这里要做的事情?

private class My_TreeCellRenderer extends DefaultTreeCellRenderer { 
    My_TreeCellRenderer() {
        super ();
    }   

    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);

        // set label text and tool tips
        setText(((My_Object)value).getTreeLabel());
        setToolTipText(((My_Object)value).getTreeToolTip());

        return this;
    }
}

private class My_TreeCellEditor extends DefaultTreeCellEditor { 
    private MouseAdapter ma;

    My_TreeCellEditor(JTree tree, DefaultTreeCellRenderer renderer) {
        super (tree, renderer);
        ma = new MouseAdapter() {
            public void mousePressed(MouseEvent e) { …
Run Code Online (Sandbox Code Playgroud)

java contextmenu jtree

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

在代码中获取上下文菜单的所有者

ContextMenu喜欢这样的:

<StackPanel Orientation="Horizontal">
    <StackPanel.ContextMenu>
        <ContextMenu>
            <MenuItem Header="Delete" Click="OnDeleteClicked" />
        </ContextMenu>
    </StackPanel.ContextMenu>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

我需要获得StackPanel拥有该实例的实例ContextMenu.我已经尝试过了:

private void OnDeleteClicked(object sender, System.Windows.RoutedEventArgs e)
{
    FrameworkElement parent = e.OriginalSource as FrameworkElement;

    while (!(parent is StackPanel))
    {               
        parent = (FrameworkElement)LogicalTreeHelper.GetParent(parent);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是在获得ContextMenuPopup父级之后VisualTreeHelper,它变为null,与之相同,它在获取之前变为null StackPanel.有关如何做到这一点的任何想法?

谢谢!

wpf contextmenu parent

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