protected XmlNode GetSelectedProperty() { // Get the XmlAttribute from the PropertyDescriptor XmlNode element = null; if (elementPropertyGrid.SelectedGridItem.PropertyDescriptor is XmlAttributePropertyDescriptor) { XmlAttributePropertyDescriptor desc = elementPropertyGrid.SelectedGridItem.PropertyDescriptor as XmlAttributePropertyDescriptor; element = desc.Attribute; } else if (elementPropertyGrid.SelectedGridItem.PropertyDescriptor is CustomXmlPropertyDescriptorBase) { CustomXmlPropertyDescriptorBase desc = elementPropertyGrid.SelectedGridItem.PropertyDescriptor as CustomXmlPropertyDescriptorBase; element = desc.XmlElement; } else { string typeString = "null"; if (elementPropertyGrid.SelectedGridItem.PropertyDescriptor != null) { typeString = elementPropertyGrid.SelectedGridItem.PropertyDescriptor.GetType().ToString(); } throw new Exception(String.Format("Expected XmlAttributePropertyDescriptor, but got {0} in GetSelectedProperty", typeString)); } return(element); }
public void Init() { XmlDocument document = new XmlDocument(); document.LoadXml("<root first='a' second='b'/>"); firstAttribute = document.DocumentElement.GetAttributeNode("first"); properties = XmlAttributePropertyDescriptor.GetProperties(document.DocumentElement.Attributes); firstAttributePropertyDescriptor = (XmlAttributePropertyDescriptor)properties["first"]; secondAttributePropertyDescriptor = (XmlAttributePropertyDescriptor)properties["second"]; }
void CurrentGrid_PropertyValueChanged(object s, PropertyValueChangedEventArgs e) { GridItem item = e.ChangedItem; if (item.Label == "Id" && !String.IsNullOrEmpty((string)e.OldValue)) { XmlAttributePropertyDescriptor pd = (XmlAttributePropertyDescriptor)item.PropertyDescriptor; XmlNodeList equalNamedColumns = pd.Attribute.OwnerElement.ParentNode.SelectNodes(String.Format("wix:Column[@Id='{0}']", item.Value), WixFiles.WxsNsmgr); if (equalNamedColumns.Count >= 2) { MessageBox.Show(String.Format("There is already a column with the name \"{0}\"!", item.Value), "Duplicate column name", MessageBoxButtons.OK, MessageBoxIcon.Error); // Rollback WixFiles.UndoManager.Undo(); // Refresh the tree if (CurrentTreeView.SelectedNode != null) { XmlNode node = (XmlNode)currTreeView.SelectedNode.Tag; string displayName = GetDisplayName(node); if (displayName != null && displayName.Length > 0 && currTreeView.SelectedNode.Text != displayName) { currTreeView.SelectedNode.Text = displayName; } } // and the grid CurrentGrid.Refresh(); } else { // Rename all row elements foreach (XmlElement dataElement in pd.Attribute.OwnerElement.ParentNode.SelectNodes(String.Format("wix:Row/wix:Data[@Column='{0}']", e.OldValue), WixFiles.WxsNsmgr)) { dataElement.SetAttribute("Column", (string)item.Value); } } } }
public void OnPropertyGridPopupContextMenu(object sender, EventArgs e) { elementPropertyGridContextMenu.MenuItems.Clear(); if (elementPropertyGrid.SelectedObject == null) { return; } XmlAttributeAdapter attAdapter = (XmlAttributeAdapter)elementPropertyGrid.SelectedObject; if (attAdapter.XmlNodeDefinition == null) { // Don't know, but can not show the context menu. return; } // Need to change "Delete" to "Clear" for required items. bool isRequired = false; // Get the XmlAttribute from the PropertyDescriptor XmlAttributePropertyDescriptor desc = elementPropertyGrid.SelectedGridItem.PropertyDescriptor as XmlAttributePropertyDescriptor; if (desc != null) { XmlAttribute att = desc.Attribute; XmlNode xmlAttributeDefinition = attAdapter.XmlNodeDefinition.SelectSingleNode(String.Format("xs:attribute[@name='{0}']", att.Name), wixFiles.XsdNsmgr); if (xmlAttributeDefinition.Attributes["use"] != null && xmlAttributeDefinition.Attributes["use"].Value == "required") { isRequired = true; } } MenuItem menuItemSeparator = new IconMenuItem("-"); // See if new menu item should be shown. bool canCreateNew = false; XmlNodeList xmlAttributes = attAdapter.XmlNodeDefinition.SelectNodes("xs:attribute", wixFiles.XsdNsmgr); foreach (XmlNode at in xmlAttributes) { string attName = at.Attributes["name"].Value; if (attAdapter.XmlNode.Attributes[attName] == null) { canCreateNew = true; } } if (canCreateNew) { // Define the MenuItem objects to display for the TextBox. MenuItem menuItem1 = new IconMenuItem("&New", new Bitmap(WixFiles.GetResourceStream("bmp.new.bmp"))); menuItem1.Click += new EventHandler(OnNewPropertyGridItem); elementPropertyGridContextMenu.MenuItems.Add(menuItem1); } // Add the clear or delete menu item MenuItem menuItem2 = null; if (elementPropertyGrid.SelectedGridItem.PropertyDescriptor != null && !(elementPropertyGrid.SelectedGridItem.PropertyDescriptor is InnerTextPropertyDescriptor)) { if (isRequired) { menuItem2 = new IconMenuItem("&Clear", new Bitmap(WixFiles.GetResourceStream("bmp.clear.bmp"))); } else { menuItem2 = new IconMenuItem("&Delete", new Bitmap(WixFiles.GetResourceStream("bmp.delete.bmp"))); } menuItem2.Click += new EventHandler(OnDeletePropertyGridItem); elementPropertyGridContextMenu.MenuItems.Add(menuItem2); } if (elementPropertyGridContextMenu.MenuItems.Count > 0) { elementPropertyGridContextMenu.MenuItems.Add(menuItemSeparator); } MenuItem menuItem3 = new IconMenuItem("Description"); menuItem3.Click += new EventHandler(OnToggleDescriptionPropertyGrid); menuItem3.Checked = elementPropertyGrid.HelpVisible; elementPropertyGridContextMenu.MenuItems.Add(menuItem3); }