如何动态添加删除菜单项?

如何动态添加删除菜单项?

参考下面代码: 

void CDBMSexampleForm::DynInitMenuPaneL( TInt aResourceId,
CEikMenuPane* aMenuPane )
{
TBuf<64> des;

CAknForm::DynInitMenuPaneL( aResourceId, aMenuPane );
if ( aResourceId == R_AVKON_FORM_MENUPANE )
{
switch ( iType )
{
case EDBMSexampleCmdCreateRecord:
CEikonEnv::Static()->ReadResource( des, R_ADD_RECORD1 );
AddMenuItem( des, EDBMSexampleCmdSaveRecord, aMenuPane);
// Disable unnecessary menu items when "Edit" is selected
aMenuPane->SetItemDimmed( EAknFormCmdAdd, ETrue );
aMenuPane->SetItemDimmed( EAknFormCmdDelete, ETrue );
aMenuPane->SetItemDimmed( EAknFormCmdLabel, ETrue );
break;

case EDBMSexampleCmdDeleteRecord:
CEikonEnv::Static()->ReadResource( des, R_DELETE_RECORD1 );
AddMenuItem( des, EDBMSexampleCmdRemoveRecord, aMenuPane);
// Disable the edit menu item
aMenuPane->SetItemDimmed( EAknFormCmdEdit, ETrue );
break;

case EDBMSexampleCmdUpdateRecord:
CEikonEnv::Static()->ReadResource( des, R_UPDATE_RECORD1 );
AddMenuItem( des, EDBMSexampleCmdChangeRecord, aMenuPane);
// Disable unnecessary menu items when "Edit" is selected
aMenuPane->SetItemDimmed( EAknFormCmdAdd, ETrue );
aMenuPane->SetItemDimmed( EAknFormCmdDelete, ETrue );
aMenuPane->SetItemDimmed( EAknFormCmdLabel, ETrue );
break;

case EDBMSexampleCmdRetrieveRecord:
aMenuPane->SetItemDimmed( EAknFormCmdEdit, ETrue );
break;
}
}
}

/*
-----------------------------------------------------------------------------

CDBMSexampleForm::AddMenuItem( const TDesC &aDesC, TInt aCommandId,
CEikMenuPane* aMenuPane)
Description: Add one menu item

Comments:

Return values: N/A

-----------------------------------------------------------------------------
*/
void CDBMSexampleForm::AddMenuItem(const TDesC &aDesC, TInt aCommandId,
CEikMenuPane* aMenuPane)
{
CEikMenuPaneItem::SData itemData;
itemData.iText = aDesC;
itemData.iCommandId = aCommandId;
itemData.iFlags = 0;
itemData.iCascadeId = 0;
aMenuPane->AddMenuItemL( itemData );
}

在WPF中动态添加删除环形菜单项,通常你需要维护一个动态的数据源(如ObservableCollection或List),并在UI层响应数据源的变化。这里是一个基本的示例: **添加新项:** 1. 先确保你的数据源支持添加操作,例如`ObservableCollection<MyMenuItemViewModel>`。 2. 当需要添加新项时,在代码背后更新数据源: ```csharp // 假设你有一个MenuItemViewModel的集合 private ObservableCollection<MyMenuItemViewModel> menuItems = new ObservableCollection<MyMenuItemViewModel>(); public void AddNewItem() { var newItem = new MyMenuItemViewModel(); // 可能需要设置一些默认值或初始化其他属性 menuItems.Add(newItem); } ``` 然后,你可能还需要触发UI更新,比如: ```csharp this.Dispatcher.Invoke(() => this.UpdateMenuItems()); ``` **删除项:** 同样地,从数据源中移除对应的项,再次更新UI: ```csharp public void RemoveMenuItem(MyMenuItemViewModel item) { menuItems.Remove(item); UpdateMenuItems(); } ``` **UpdateMenuItems()函数:** 这个方法负责同步UI,遍历数据源并将每个项绑定到环形菜单上: ```csharp private void UpdateMenuItems() { foreach (var menuItem in menuItems) { // 选择适当的UI元素(可能是DataTemplate或UserControl) var menuItemElement = FindDataTemplate(menuItem); // 这里假设有个查找模板的方法 // 将menuItem绑定到环形菜单上 BindToRingMenu(menuItemElement, menuItem); } } ``` 记得在适当的地方清理不再使用的资源,比如释放UI元素的`DataContext`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值