Devexpress的WPF控件代码示例网上太少了,想在控件基类里面设置一个右键菜单都查了好久没有查到,最后自己摸索出来一个方法,如下面代码
public class UILayoutControl : LayoutControl
{
public UILayoutControl():base()
{
BarManager manager = new BarManager();
manager.ItemClick += Manager_ItemClick;
BarButtonItem btnModify = new BarButtonItem();
btnModify.Name = "itemModify";
btnModify.SetResourceReference(BarButtonItem.ContentProperty, "layoutModify");
manager.Items.Add(btnModify);
BarButtonItem btnSave = new BarButtonItem();
btnSave.Name = "itemSave";
btnSave.SetResourceReference(BarButtonItem.ContentProperty, "layoutSave");
manager.Items.Add(btnSave);
//定义右键菜单的布局
PopupMenu popupMenu = new PopupMenu();
popupMenu.ItemLinks.Add(btnModify);
popupMenu.ItemLinks.Add(new BarItemLinkSeparator());//分割线
popupMenu.ItemLinks.Add(btnSave);
//将右键菜单设置到控件上
DevExpress.Xpf.Bars.BarManager.SetDXContextMenu(this, popupMenu);
//this.ContextMenu = new System.Windows.Controls.ContextMenu();
//MenuItem itemModify = new MenuItem();
//itemModify.Name = "itemModify";
//itemModify.Header = "调整布局";
//itemModify.Click += ItemModify_Click;
//this.ContextMenu.Items.Add(itemModify);
//MenuItem itemSave = new MenuItem();
//itemSave.Name = "itemSave";
//itemSave.Header = "保存布局";
//itemSave.Click += itemSave_Click;
//this.ContextMenu.Items.Add(itemSave);
}
//private void ItemModify_Click(object sender, System.Windows.RoutedEventArgs e)
//{
// this.IsCustomization = true;
//}
//private void itemSave_Click(object sender, System.Windows.RoutedEventArgs e)
//{
// this.IsCustomization = false;
// using (XmlWriter writer = XmlWriter.Create("CustomerNewElementArribute.xml"))
// {
// this.WriteToXML(writer);
// writer.Close();
// }
//}
private void Manager_ItemClick(object sender, ItemClickEventArgs e)
{
if (e.Item.Name == "itemModify")
{
this.IsCustomization = true;
}
else if (e.Item.Name == "itemSave")
{
this.IsCustomization = false;
using (XmlWriter writer = XmlWriter.Create("CustomerNewElementArribute.xml"))
{
this.WriteToXML(writer);
writer.Close();
}
}
}
}
效果如图
虽然注释掉的代码也可以实现右键菜单,但是样式都是原生的,不是Devexpress的。代码中还是用了菜单名称动态加载字典资源方法,不能直接使用标记扩展语言直接赋值,那样直接解析为字符串,不会加载字典资源。