我制作了一个扩展Base适配器的自定义列表适配器.列表中的每个项目都有一个图像按钮,2个文本视图和一个按钮.我尝试将上下文菜单添加到列表中,以便显示列表中项目的一些选项.
registerForContextMenu(getListView());
Run Code Online (Sandbox Code Playgroud)
我使用MenuInflater对象来膨胀上下文菜单xml文件.但是在单击列表中的项目时,没有显示任何内容,或者未显示单击列表项目的常规突出显示.是否上下文菜单不适用于自定义列表视图?任何帮助将非常感激.
此致,Primal
我在C#Win App中使用旧的ActiveX控件.它有一个MouseUp事件,它的eventArgs传递我们点击的点的X和Y但是对于我的场景我使用它的ItemClick事件并且它的eventArgs没有关于X和Y的信息.但是我需要知道它们显示我的弹出窗口...所以有一种方法可以找出用户右键单击的X和Y的位置,这样我就可以将它传递给我的contextMenuStrip.Show方法.
谢谢
我有一个Listbox,开始时没有任何项目.当用户使用GUI从组合框中选择值并单击添加按钮时,列表框将添加一个项目.列表框还有一个上下文菜单集.
如何在列表框中没有项目的情况下使用XAML确保将Listbox.contextmenu.Visibility属性设置为隐藏?
UPDATE
我实际上最终使用了这段代码.请评论其适当性
<Style TargetType="ListBox">
<Style.Resources>
<ContextMenu x:Key="cm">
<MenuItem Header="Buy"/>
<MenuItem Header="Sell"/>
</ContextMenu>
</Style.Resources>
<Setter Property="ContextMenu" Value="{StaticResource cm}"/>
<Style.Triggers>
<Trigger Property="ListBox.HasItems" Value="False">
<Setter Property="ContextMenu.Visibility" Value="Hidden"/>
</Trigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud) 我写了一个usercontrol,实质上是一个小部件的调色板.当用户右键单击我在控件上绘制的其中一个小部件时,我希望允许用户删除所选小部件.
在我的usercontrol的MouseClick事件处理程序中,我确定用户单击了哪个窗口小部件.然后我检查鼠标按钮是否是正确的按钮.如果是这样,我会显示一个菜单,允许用户删除小部件:
if (e.Button == MouseButtons.Right)
{
ContextMenu deleteMenu = new ContextMenu();
MenuItem deleteItem = new MenuItem("Delete...", new System.EventHandler(this.onDeleteMenuItem_Click));
deleteMenu.MenuItems.Add("Delete");
deleteMenu.Show(this, new Point(mouseXPosition, mouseYPosition));
}
Run Code Online (Sandbox Code Playgroud)
我的这个项目的处理程序是:
private void onDeleteMenuItem_Click(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine("Deleting...");
}
Run Code Online (Sandbox Code Playgroud)
当我右键单击时,会显示菜单,但处理程序永远不会被调用.我究竟做错了什么?
这就是我现在在Canvas标签中的内容.我一直试图让右键菜单工作多年.
<controlsInputToolkit:ContextMenuService.ContextMenu>
<controlsInputToolkit:ContextMenu>
<controlsInputToolkit:MenuItem Header="Move Up" Click="MoveUp_Click">
<controlsInputToolkit:MenuItem.Icon>
<Rectangle Width="16" Height="16" Fill="{StaticResource MoveUpBrush}"/>
</controlsInputToolkit:MenuItem.Icon>
</controlsInputToolkit:MenuItem>
<controlsInputToolkit:MenuItem Header="Move Down" Click="MoveDown_Click">
<controlsInputToolkit:MenuItem.Icon>
<Rectangle Width="16" Height="16" Fill="{StaticResource MoveDownBrush}"/>
</controlsInputToolkit:MenuItem.Icon>
</controlsInputToolkit:MenuItem>
<controlsInputToolkit:Separator/>
<controlsInputToolkit:MenuItem Header="Delete" Click="Delete_Click">
<controlsInputToolkit:MenuItem.Icon>
<Rectangle Width="16" Height="16" Fill="{StaticResource DeleteBrush}"/>
</controlsInputToolkit:MenuItem.Icon>
</controlsInputToolkit:MenuItem>
</controlsInputToolkit:ContextMenu>
</controlsInputToolkit:ContextMenuService.ContextMenu>
Run Code Online (Sandbox Code Playgroud)
我刚刚处理了以下代码:http://www.silverlight.net/content/samples/sl4/toolkitcontrolsamples/run/default.html
我得到的错误是:
"在'ContextMenuService'类型中找不到可附加属性'ContextMenu'."
"找不到类型'controlsInputToolkit:ContextMenu'.确认您没有错过程序集引用,并且已经构建了所有引用的程序集."
还有其他一大堆那样的人.我发现解决这个问题的唯一线索可能与工具包没有引用正确版本的Silverlight有关?
因为我确实只有Silverlight 3,然后我下载了Silverlight 5的东西,我认为这就是我的项目所在.除了我不知道如何看到Toolkit实际引用的内容,或者如何更改它.
我正在使用Windows Phone Control工具包中的ContextMenu.想知道如何知道列表中的哪个列表项被按下?似乎我可以知道选择了哪个上下文菜单,但我无法知道操作哪个列表项.请帮忙.谢谢!
<DataTemplate x:Key="ListItemTemplate">
<StackPanel Grid.Column="1" VerticalAlignment="Top">
<TextBlock Tag="{Binding Index}" Text="{Binding SName}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" />
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu>
<toolkit:MenuItem Header="Add to playlist" Click="Move_Click"/>
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
</StackPanel>
private void Move_Click(object sender, RoutedEventArgs e)
{
String name = (string)((MenuItem)sender).Header;
// how to know which index of the item is targeted on
}
Run Code Online (Sandbox Code Playgroud) silverlight xaml contextmenu silverlight-toolkit windows-phone-8
我该如何使用FXML
创建子菜单?我在start方法的java中完成了它,但我想将我的代码移动到FXML
.请检查item2
,我已添加2 submenus
.
ContextMenu contextMenu = new ContextMenu();
Menu item2 = new Menu("Actions");
MenuItem item7 = new MenuItem("Close All");
MenuItem subMenu1 = new MenuItem("Save");
MenuItem subMenu2 = new MenuItem("Save As..");
item2.getItems().addAll(subMenu1, subMenu2);
Run Code Online (Sandbox Code Playgroud) 我有一个简单的数据表有3列,显示AccessCard实体在一列我有一个"状态",可以说是"非活动","删除"等.显然这些值来自支持bean.
所以,如果我们说,#{card.accessCard.flgDeleted} == true
则显示"INACTIVE"
在上下文菜单中,我有一个选项"Flag as Deleted" flgDeleted == false
.我不想要删除选项,如果flgDeleted == false
.
使用我迄今为止实现的代码,当我选择LEFT行时,一切正常.当我使用右键单击选择一行并显示上下文菜单的同时,支持bean似乎没有更新.有趣的是,如果右键单击一行并实际选择让我们说标记为已删除它就可以解决所有问题.
<p:contextMenu id="contextMenu" for="cardTable">
<p:menuitem value="View Card History" icon="ui-icon-search"/>
<p:menuitem value="Flag as Deleted" icon="ui-icon-trash"
process="@form" update="@form" oncomplete="dlgDeleteCard.show()"
rendered="#{!card.accessCard.flgDeleted}" />
</p:contextMenu>
<h:panelGrid style="width:500px;">
<p:dataTable var="pc" id="cardTable" widgetVar="cardTable"
value="#{card.accessCardList}"
selectionMode="single" selection="#{card.accessCard}"
rowKey="#{pc.cardId}">
<p:ajax event="rowSelect" listener="#{card.onRowSelect}"
update="@form :messages" />
<p:column id="cardId" width="20%" headerText="Card Id">
<h:outputText value="#{pc.cardId}" />
</p:column>
<p:column id="cardHolderName" width="50%"
headerText="Current Holder">
<h:outputText value="#{pc.currentHolder}" />
</p:column>
<p:column id="cardStatus" width="10%" headerText="Status">
#{card.getCardStatus(pc)}
</p:column>
</p:dataTable>
</h:panelGrid>
Run Code Online (Sandbox Code Playgroud) 我是Android开发的新手。我试图将上下文菜单添加到我的应用程序。我了解默认情况下,它需要长按一下按钮才能打开上下文菜单。但是我需要使其显示在单击上。我在stackoverflow中尝试了所有其他解决方案,但没有一个真正对我有帮助。
我已经在下面发布了我的代码。请告诉我要进行哪些修改才能使其正常工作。
public class ThirdActivity extends ActionBarActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.third_layout);
confirmButton = (Button) findViewById(R.id.confirmButton);
registerForContextMenu(confirmButton);
}
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Select Menu");
menu.add(0, v.getId(), 0, "Action 1");
}
public boolean onContextItemSelected(MenuItem item) {
if (item.getTitle() == "Action 1") {
//do something
}
}
Run Code Online (Sandbox Code Playgroud) 我已经寻找了很长一段时间,现在正在寻找一个可行的解决方案,但是我还是想问一个问题:
我的应用程序在对话框窗体中有一个DataGridView,我希望ContextMenu出现在单元格的右键单击上。
我单击鼠标右键,然后ContextMenu看起来很好,但是无论我尝试使用哪种解决方案在StackExchange上,它总是偏移很多。
这与表格和/或它的父母有关吗?还是我只是在这里愚蠢地错过了什么?
谢谢杰米
Form.cs
private void dataGridContents_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
if (e.RowIndex > -1 && e.ColumnIndex > -1)
{
Debug.WriteLine("Cell right clicked!");
DataGridViewCell cell = (sender as DataGridView)[e.ColumnIndex, e.RowIndex];
contextCell.Show(cell.DataGridView, PointToClient(Cursor.Position));
if (!cell.Selected)
{
cell.DataGridView.ClearSelection();
cell.DataGridView.CurrentCell = cell;
cell.Selected = true;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
抱歉,我尝试过:
new Point(e.X, e.Y)
new Point(e.Location.X, e.Location.Y)
new Point(MousePosition.X, MousePosition.Y)
PointToClient(e.X, e.Y)
new Point(Cursor.Position.X, Cursor.Position.Y)
Control.MousePosition
Cursor.Position
可能还有其他一些。
编辑2
这就是我所说的偏移量-有些解决方案导致此偏移量在一定程度上发生变化(有些确实很远,等等)-但所有偏移量都与实际Cursor一样。
编辑3
我contextCell
是一个new ContextMenu()
contextmenu ×10
c# ×3
android ×2
java ×2
silverlight ×2
winforms ×2
xaml ×2
adapter ×1
datagridview ×1
datatable ×1
fxml ×1
javafx ×1
javafx-2 ×1
jsf ×1
list ×1
location ×1
primefaces ×1
triggers ×1
wpf ×1