在我的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键?
我试图在 中配置按钮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) 我正在尝试编写一个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?
我正在开发一个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获取文本.我如何实现这一目标?
我有一些麻烦搞清楚如何设置正确的DataContext一个ContextMenu.
我有一组视图模型,他们是一个ItemsControl.每个视图模型都有一组项目,这些项目也是另一个项目的来源ItemsControl.每个项目用于绘制具有的图像ContextMenu.将MenuItems在ContextMenu需要绑定到视图模型的一个命令,但是PlacementTarget的ContextMenu是指向单个项目.
我的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)
我如何设置DataContext的ContextMenu,以该项目的相应的父视图模型?
我正在EditText为传统的蒙古人做垂直.我通过EditText在旋转的内部嵌入一个略微修改的内容来成功实现它ViewGroup.我需要创建一个完全自定义的上下文菜单,因为系统不支持垂直文本,并且在旋转时也不会ViewGroup旋转.所以我想完全禁用系统上下文菜单.
请注意,这与仅仅尝试禁用复制/粘贴/等的这些问题不同:
虽然我没有在模拟器中出现上下文菜单,但我将它出现在我的Android 5.0.2小米手机中.
我试过了:
我对hacks持开放态度,但我需要它能够在各种设备上持续工作.马克·墨菲(下议院人)写了一段时间,早在回答其他用户试图做同样的事情:
我怀疑,即使你拿出一个答案,它也无法在各种设备上运行.设备制造商倾向于为EditText推出自己的"上下文菜单",从而使开发人员尝试将项目添加到该上下文菜单中.我的猜测是,试图阻止该上下文菜单会产生类似的结果.
我运气不好吗?
我现在唯一能想到的就是完全重写TextView并EditText从头开始(好吧,通过修改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
将单个文件名传递给上下文菜单shell命令很简单:
[HKEY_CLASSES_ROOT\*\shell\MyProgram\Command]
@="program.exe %1"
Run Code Online (Sandbox Code Playgroud)
但是,如果我选择多个文件,program.exe则会为每个这样选择的文件调用.
我想要做的只是调用program.exe一次,将当前选中的所有文件名传递给它.
这该怎么做?
我有一个ListBox,我想为列表中的每个项目添加一个上下文菜单.我已经看到"解决方案"右键单击选择一个项目并禁止上下文菜单,如果在空白区域,但这个解决方案感觉很脏.
有谁知道更好的方法?
我正在尝试在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) 我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.有关如何做到这一点的任何想法?
谢谢!