private void buttonCreate_Click(object sender, EventArgs e) { if (!string.IsNullOrEmpty(docName)) { try { Assembly assembly = typeof(IPageInstance).Module.Assembly; AssemblyRefCreator.AssemblyRefCreateator(assembly, docName); #region nodes cration foreach (DataGridViewRow row in dataGridNodesTable.Rows) { DataRowComponents rowData = (DataRowComponents)row.Cells["DataSource"].Value; XmlNode insertedNode = rowData.Tag as XmlNode; Uri uri = new Uri(docName); XmlElement newNode = insertedNode.OwnerDocument.CreateElement("Compile", insertedNode.NamespaceURI); string insertedNodeName = insertedNode.Attributes.GetNamedItem("Include").Value; string parsedInsertedNodeName = insertedNodeName; parsedInsertedNodeName = Path.GetFileName(insertedNodeName); newNode.SetAttribute("Include", insertedNodeName.Replace("aspx.cs", "aspx.jaz.cs")); XmlElement dependentUponNode = insertedNode.OwnerDocument.CreateElement("DependentUpon", insertedNode.NamespaceURI); dependentUponNode.InnerText = parsedInsertedNodeName.Replace(".aspx.cs", ".aspx"); newNode.AppendChild(dependentUponNode); if ((bool)row.Cells["Existing jaz files"].Value) { if (insertedNode.ParentNode.SelectNodes("*[@Include='" + insertedNodeName.Replace(OldFileExtension, NewFileExtension) + "']").Count == 0) { insertedNode.ParentNode.InsertAfter(newNode, insertedNode); insertedNode.OwnerDocument.Save(docName); string fileFullPath = docName.Replace(uri.Segments[uri.Segments.Length - 1].ToString(), "") + insertedNode.Attributes.GetNamedItem("Include").Value .Replace(OldFileExtension, NewFileExtension); progectSettings.AddNewJazFile(fileFullPath); FileInfo newFile = new FileInfo(fileFullPath); FileStream fs = newFile.Create(); fs.Dispose(); CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp"); string ns = row.Cells["Guessed namespace"].Value.ToString(); string cn = row.Cells["Guessed class name"].Value.ToString(); FileGenerator.GenerateCode ( provider, FileGenerator.BuildJAZContent(ns, cn, insertedNodeName), fileFullPath ); string exportFilePath = Path.Combine(Path.GetDirectoryName(docName), "ExportSetting.xml"); PageSettings pageSet = new PageSettings(exportFilePath, insertedNodeName, ns, cn); XmlStoreProvider storeProvider = new XmlStoreProvider(exportFilePath); progectSettings.SelectedPage = pageSet; storeProvider.SaveSettings(progectSettings); } } else { XmlNode removedNode = insertedNode.ParentNode.SelectSingleNode("*[@Include='" + insertedNodeName.Replace(OldFileExtension, NewFileExtension) + "']"); if (removedNode != null) { insertedNode.ParentNode.RemoveChild(removedNode); insertedNode.OwnerDocument.Save(docName); string unselectedFileName = docName.Replace(uri.Segments[uri.Segments.Length - 1].ToString(), "") + insertedNode.Attributes.GetNamedItem("Include").Value .Replace(OldFileExtension, NewFileExtension); FileInfo newFile = new FileInfo(unselectedFileName); newFile.Delete(); if (progectSettings.GetJazFileCollection().Contains(unselectedFileName)) { progectSettings.RemoveJazFileFromCollection(unselectedFileName); } } } } MessageBox.Show("Modify proccess successed", "executed", MessageBoxButtons.OK); #endregion } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { dataGridNodesTable.Rows.Clear(); dataGridNodesTable.Columns.Clear(); } } }
private void openToolStripMenuItem_Click(object sender, EventArgs e) { dataGridNodesTable.Rows.Clear(); dataGridNodesTable.Columns.Clear(); OpenFileDialog ofd = new OpenFileDialog(); ofd.InitialDirectory = "c:\\"; ofd.Filter = "project files (*.csproj)|*.csproj|All files (*.*)|*.*"; ofd.FilterIndex = 1; ofd.RestoreDirectory = true; if (ofd.ShowDialog() == DialogResult.OK) { try { #region CheckBox list creator progectSettings = new ProjectSettings(); dataGridNodesTable.UseWaitCursor = true; XmlDocument doc = new XmlDocument(); docName = ofd.FileName.ToString(); doc.Load(docName); XmlDocument docExport = new XmlDocument(); string exportFilePath = Path.Combine(Path.GetDirectoryName(docName), "ExportSetting.xml"); progectSettings.ExportFileName = exportFilePath; XmlNode root = doc.DocumentElement; XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable); nsmgr.AddNamespace("ns", root.NamespaceURI); Assembly assembly = typeof(IPageInstance).Module.Assembly; progectSettings.IsRefJCMSAdded = AssemblyRefCreator.IsAssemblyRefAdded(assembly, docName); progectSettings.AddBasePageToCollection("test"); progectSettings.AddBasePageToCollection("test2"); XmlNode nameSpace = root.SelectSingleNode("//ns:RootNamespace", nsmgr); jazNamespace = nameSpace.InnerText; progectSettings.RootNameSpace = jazNamespace; XmlNodeList nodeList = root.SelectNodes("//ns:Compile", nsmgr); List <XmlNode> nodeCollection = new List <XmlNode>(); foreach (XmlNode node in nodeList) { if (node.Attributes.GetNamedItem("Include").Value.Contains(OldFileExtension)) { nodeCollection.Add(node); } } List <DataRowComponents> dataRowCollection = new List <DataRowComponents>(); foreach (XmlNode selectedNodes in nodeCollection) { DataRowComponents dataRow = new DataRowComponents(); dataRow.IsSelected = false; string location = selectedNodes.Attributes.GetNamedItem("Include").Value; dataRow.Text = location; string xPath = "//ns:Compile[@Include='" + location.Replace(OldFileExtension, NewFileExtension) + "']"; XmlNodeList jazNodesList = root.SelectNodes(xPath, nsmgr); jazClassName = Path.GetFileName(location).Replace(OldFileExtension, ""); string directory = Path.GetDirectoryName(location).Replace("\\", "."); string jazNamespaceNode = jazNamespace; if (!string.IsNullOrEmpty(directory)) { jazNamespaceNode = jazNamespace + "." + directory; } dataRow.Namespace = jazNamespaceNode; dataRow.ClassName = jazClassName; string exFilePath = Path.Combine(Path.GetDirectoryName(docName), "ExportSetting.xml"); PageSettings pageSet = new PageSettings(exFilePath, location); XmlStoreProvider storeProvider = new XmlStoreProvider(exFilePath); progectSettings.SelectedPage = pageSet; storeProvider.LoadSettings(progectSettings); if (progectSettings.IsSetted) { dataRow.Namespace = progectSettings.SelectedPage.NameSpace; dataRow.ClassName = progectSettings.SelectedPage.ClassName; } if (jazNodesList.Count > 0) { dataRow.IsSelected = true; } dataRow.Tag = selectedNodes; dataRow.BasePage = "test2"; dataRowCollection.Add(dataRow); } dataGridNodesTable.AutoGenerateColumns = false; DataSet dataSet = new DataSet("JazCmsDataSet"); DataTable dataTable = new DataTable("DataRowComponentsCollection"); DataTable basePageListTable = new DataTable("BasePageListTable"); basePageListTable.Columns.Add("BasePage", typeof(string)); foreach (string page in progectSettings.BasePageCollection) { basePageListTable.Rows.Add(page); } List <string> hiddenColumns = new List <string>(); foreach (PropertyInfo property in typeof(DataRowComponents).GetProperties()) { Type type = property.PropertyType; DisplayNameAttribute[] propertyArrey = (DisplayNameAttribute[]) (property.GetCustomAttributes(typeof(DisplayNameAttribute), true)); HidePropertyAttribute[] hidePropertyArrey = (HidePropertyAttribute[]) (property.GetCustomAttributes(typeof(HidePropertyAttribute), true)); DataColumn col; if (propertyArrey.Count() != 0) { col = new DataColumn(propertyArrey.First().DisplayName, type); } else { col = new DataColumn(property.Name, type); } dataTable.Columns.Add(col); if (hidePropertyArrey.Count() != 0 && hidePropertyArrey.First().IsHidden) { hiddenColumns.Add(col.ColumnName); } } DataColumn dataSource = new DataColumn("DataSource", typeof(DataRowComponents)); dataTable.Columns.Add(dataSource); foreach (DataRowComponents row in dataRowCollection) { dataTable.Rows.Add(row.IsSelected, row.Text, row.ClassName, row.Namespace, row.BasePage, row.Tag, row); } dataSet.Tables.Add(dataTable); dataSet.Tables.Add(basePageListTable); DataColumn child = dataSet.Tables["DataRowComponentsCollection"].Columns["Custom base page"]; DataColumn parent = dataSet.Tables["BasePageListTable"].Columns["BasePage"]; parent.Unique = true; ForeignKeyConstraint fk = new ForeignKeyConstraint("FK_BasePage", parent, child); dataSet.Tables["DataRowComponentsCollection"].Constraints.Add(fk); dataSet.Relations.Add("BasePage", parent, child); DataRelationCollection relationCollection = dataSet.Relations; SortedList <string, DataRelation> relCollection = new SortedList <string, DataRelation>(); foreach (DataRelation rel in relationCollection) { if (rel.ChildTable.TableName == "DataRowComponentsCollection") { relCollection.Add(rel.ChildColumns.First().ColumnName, rel); } } foreach (DataColumn col in dataTable.Columns) { if (relCollection.Keys.Contains(col.ColumnName)) { DataColumn parentColumn = relCollection.Where(p => p.Key == col.ColumnName) .Select(p => p.Value).First().ParentColumns.First(); DataGridViewComboBoxColumn comboBoxColumn = new DataGridViewComboBoxColumn(); comboBoxColumn.Name = col.ColumnName; List <string> sourceList = new List <string>(); foreach (DataRow dgvRow in parentColumn.Table.Rows) { sourceList.Add(dgvRow[parentColumn.ColumnName].ToString()); } comboBoxColumn.DataSource = sourceList.ToArray(); dataGridNodesTable.Columns.Add(comboBoxColumn); if (hiddenColumns.Contains(col.ColumnName)) { comboBoxColumn.Visible = false; } } else if (col.DataType == typeof(bool)) { DataGridViewCheckBoxColumn checkBoxColumn = new DataGridViewCheckBoxColumn(); checkBoxColumn.Name = col.ColumnName; dataGridNodesTable.Columns.Add(checkBoxColumn); if (hiddenColumns.Contains(col.ColumnName)) { checkBoxColumn.Visible = false; } } else if (col.DataType == typeof(string)) { DataGridViewTextBoxColumn textBoxColumn = new DataGridViewTextBoxColumn(); textBoxColumn.Name = col.ColumnName; dataGridNodesTable.Columns.Add(textBoxColumn); if (hiddenColumns.Contains(col.ColumnName)) { textBoxColumn.Visible = false; } } else { DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn(); column.Name = col.ColumnName; dataGridNodesTable.Columns.Add(column); column.Visible = false; if (hiddenColumns.Contains(col.ColumnName)) { column.Visible = false; } } } foreach (DataRowComponents row in dataRowCollection) { dataGridNodesTable.Rows.Add( row.IsSelected, row.Text, row.ClassName, row.Namespace , row.BasePage, row.Tag, row ); } dataGridNodesTable.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; dataGridNodesTable.Columns["Path to file"].ReadOnly = true; dataGridNodesTable.Columns["Tag"].Visible = false; DataGridViewButtonColumn buttonColumn = new DataGridViewButtonColumn(); buttonColumn.Name = "Details"; dataGridNodesTable.Columns.Add(buttonColumn); foreach (DataGridViewRow row in dataGridNodesTable.Rows) { if ((bool)row.Cells["Existing jaz files"].Value) { row.Cells["Guessed class name"].ReadOnly = true; row.Cells["Guessed namespace"].ReadOnly = true; } row.Cells["Details"].Value = "..."; } #endregion buttonCreate.Top = dataGridNodesTable.Height + 100; buttonCreate.Left = dataGridNodesTable.Left + dataGridNodesTable.Width - buttonCreate.Width; dataGridNodesTable.UseWaitCursor = false; foreach (ToolStripMenuItem item in contextMenuStripDataGridView.Items) { item.CheckedChanged += new EventHandler(contextMenuStripDataGridView_CheckedChanged); switch (item.Text) { case "Class name": item.Tag = "Guessed class name"; break; case "Namespace": item.Tag = "Guessed namespace"; break; case "Base page": item.Tag = "Custom base page"; break; } } #region DataGrid menu dataGridNodesTable.CellMouseClick -= new DataGridViewCellMouseEventHandler(dataGridNodesTable_CellContentClick); dataGridNodesTable.CellMouseClick += new DataGridViewCellMouseEventHandler(dataGridNodesTable_CellContentClick); dataGridNodesTable.Columns["Details"].HeaderCell.ContextMenuStrip = contextMenuStripDataGridView; dataGridNodesTable.EnableHeadersVisualStyles = false; dataGridNodesTable.Columns["Details"].HeaderCell.Style.ForeColor = Color.Blue; #endregion } catch (Exception ex) { MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message); } } }
private void openToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.InitialDirectory = "c:\\"; ofd.Filter = "project files (*.csproj)|*.csproj|All files (*.*)|*.*"; ofd.FilterIndex = 1; ofd.RestoreDirectory = true; if (ofd.ShowDialog() == true) { try { #region CheckBox list creator ProgectSettings = new ProjectSettings(); XmlDocument doc = new XmlDocument(); docName = ofd.FileName.ToString(); doc.Load(docName); XmlDocument docExport = new XmlDocument(); string exportFilePath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(docName), "ExportSetting.xml"); ProgectSettings.ExportFileName = exportFilePath; XmlNode root = doc.DocumentElement; XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable); nsmgr.AddNamespace("ns", root.NamespaceURI); Assembly assembly = typeof(IPageInstance).Module.Assembly; ProgectSettings.IsRefJCMSAdded = AssemblyRefCreator.IsAssemblyRefAdded(assembly, docName); ProgectSettings.AddBasePageToCollection("test"); ProgectSettings.AddBasePageToCollection("test2"); XmlNode nameSpace = root.SelectSingleNode("//ns:RootNamespace", nsmgr); jazNamespace = nameSpace.InnerText; ProgectSettings.RootNameSpace = jazNamespace; XmlNodeList nodeList = root.SelectNodes("//ns:Compile", nsmgr); List <XmlNode> nodeCollection = new List <XmlNode>(); foreach (XmlNode node in nodeList) { if (node.Attributes.GetNamedItem("Include").Value.Contains(OldFileExtension)) { nodeCollection.Add(node); } } List <DataRowComponents> dataRowCollection = new List <DataRowComponents>(); foreach (XmlNode selectedNodes in nodeCollection) { DataRowComponents dataRow = new DataRowComponents(); dataRow.IsSelected = false; string location = selectedNodes.Attributes.GetNamedItem("Include").Value; dataRow.Text = location; string xPath = "//ns:Compile[@Include='" + location.Replace(OldFileExtension, NewFileExtension) + "']"; XmlNodeList jazNodesList = root.SelectNodes(xPath, nsmgr); jazClassName = System.IO.Path.GetFileName(location).Replace(OldFileExtension, ""); string directory = System.IO.Path.GetDirectoryName(location).Replace("\\", "."); string jazNamespaceNode = jazNamespace; if (!string.IsNullOrEmpty(directory)) { jazNamespaceNode = jazNamespace + "." + directory; } dataRow.Namespace = jazNamespaceNode; dataRow.ClassName = jazClassName; string exFilePath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(docName), "ExportSetting.xml"); PageSettings pageSet = new PageSettings(exFilePath, location); XmlStoreProvider storeProvider = new XmlStoreProvider(exFilePath); ProgectSettings.SelectedPage = pageSet; storeProvider.LoadSettings(ProgectSettings); if (ProgectSettings.IsSetted) { dataRow.Namespace = ProgectSettings.SelectedPage.NameSpace; dataRow.ClassName = ProgectSettings.SelectedPage.ClassName; } if (jazNodesList.Count > 0) { dataRow.IsSelected = true; } dataRow.Tag = selectedNodes; dataRow.BasePage = "test2"; dataRowCollection.Add(dataRow); } DataSet dataSet = new DataSet("JazCmsDataSet"); DataTable dataTable = new DataTable("DataRowComponentsCollection"); DataTable basePageListTable = new DataTable("BasePageListTable"); basePageListTable.Columns.Add("BasePage", typeof(string)); foreach (string page in ProgectSettings.BasePageCollection) { basePageListTable.Rows.Add(page); } List <string> hiddenColumns = new List <string>(); foreach (PropertyInfo property in typeof(DataRowComponents).GetProperties()) { Type type = property.PropertyType; DisplayNameAttribute[] propertyArrey = (DisplayNameAttribute[]) (property.GetCustomAttributes(typeof(DisplayNameAttribute), true)); HidePropertyAttribute[] hidePropertyArrey = (HidePropertyAttribute[]) (property.GetCustomAttributes(typeof(HidePropertyAttribute), true)); DataColumn col; if (propertyArrey.Count() != 0) { col = new DataColumn(propertyArrey.First().DisplayName, type); } else { col = new DataColumn(property.Name, type); } dataTable.Columns.Add(col); if (hidePropertyArrey.Count() != 0 && hidePropertyArrey.First().IsHidden) { hiddenColumns.Add(col.ColumnName); } } DataColumn dataSource = new DataColumn("DataSource", typeof(DataRowComponents)); dataTable.Columns.Add(dataSource); foreach (DataRowComponents row in dataRowCollection) { dataTable.Rows.Add(row.IsSelected, row.Text, row.ClassName, row.Namespace, row.BasePage, row.Tag, row); } dataSet.Tables.Add(dataTable); dataSet.Tables.Add(basePageListTable); DataColumn child = dataSet.Tables["DataRowComponentsCollection"].Columns["Custom base page"]; DataColumn parent = dataSet.Tables["BasePageListTable"].Columns["BasePage"]; parent.Unique = true; ForeignKeyConstraint fk = new ForeignKeyConstraint("FK_BasePage", parent, child); dataSet.Tables["DataRowComponentsCollection"].Constraints.Add(fk); dataSet.Relations.Add("BasePage", parent, child); DataRelationCollection relationCollection = dataSet.Relations; SortedList <string, DataRelation> relCollection = new SortedList <string, DataRelation>(); foreach (DataRelation rel in relationCollection) { if (rel.ChildTable.TableName == "DataRowComponentsCollection") { relCollection.Add(rel.ChildColumns.First().ColumnName, rel); } } GridView gridview = new GridView(); listview.DataContext = dataTable; Binding bind = new Binding(); listview.ItemsSource = dataTable as IEnumerable; foreach (DataColumn col in dataTable.Columns) { GridViewColumn gvcolumn = new GridViewColumn(); gvcolumn.Header = col.ColumnName; if (hiddenColumns.Contains(col.ColumnName)) { gvcolumn.Width = 0; } if (relCollection.Keys.Contains(col.ColumnName)) { DataColumn parentColumn = relCollection.Where(p => p.Key == col.ColumnName) .Select(p => p.Value).First().ParentColumns.First(); DataTemplate dtCombo = new DataTemplate(); dtCombo.DataType = typeof(String); FrameworkElementFactory fefCombo = new FrameworkElementFactory(typeof(ComboBox)); Binding bdCombo = new Binding(col.ColumnName); List <string> basePagesList = new List <string>(); foreach (DataRow comboRow in parentColumn.Table.Rows) { basePagesList.Add(comboRow.ItemArray.First().ToString()); } ComboBox templateComboBox = new ComboBox(); templateComboBox.FontSize = 12; fefCombo.SetValue(ComboBox.ItemsSourceProperty, basePagesList); fefCombo.SetValue(ComboBox.BackgroundProperty, TransparentBrush); fefCombo.SetValue(ComboBox.ForegroundProperty, new SolidColorBrush(Colors.Goldenrod)); fefCombo.SetValue(ComboBox.BorderBrushProperty, TransparentBrush); fefCombo.SetValue(ComboBox.FontSizeProperty, templateComboBox.FontSize); fefCombo.SetBinding(ComboBox.SelectedItemProperty, bdCombo); dtCombo.VisualTree = fefCombo; gvcolumn.CellTemplate = dtCombo; gridview.Columns.Add(gvcolumn); } else if (col.DataType == typeof(bool)) { DataTemplate dtCheckbox = new DataTemplate(); dtCheckbox.DataType = typeof(Boolean); FrameworkElementFactory fefCheckbox = new FrameworkElementFactory(typeof(CheckBox)); Binding bdCheckbox = new Binding(col.ColumnName); fefCheckbox.SetBinding(CheckBox.IsCheckedProperty, bdCheckbox); dtCheckbox.VisualTree = fefCheckbox; gvcolumn.CellTemplate = dtCheckbox; gridview.Columns.Add(gvcolumn); } else if (col.DataType == typeof(string)) { DataTemplate dtTextBox = new DataTemplate(); dtTextBox.DataType = typeof(string); FrameworkElementFactory fefTextBox = new FrameworkElementFactory(typeof(TextBox)); Binding bdTextBox = new Binding(col.ColumnName); Binding bdIsTextBoxReadOnly = new Binding("Existing jaz files"); fefTextBox.SetBinding(TextBox.TextProperty, bdTextBox); TextBox templateTB = new TextBox(); templateTB.FontSize = 12; if (col.ColumnName == "Path to file") { fefTextBox.SetValue(TextBox.IsReadOnlyProperty, true); } else { fefTextBox.SetBinding(TextBox.IsReadOnlyProperty, bdIsTextBoxReadOnly); } fefTextBox.SetValue(TextBox.BackgroundProperty, TransparentBrush); fefTextBox.SetValue(TextBox.ForegroundProperty, new SolidColorBrush(Colors.Goldenrod)); fefTextBox.SetValue(TextBox.FontSizeProperty, templateTB.FontSize); fefTextBox.SetValue(TextBox.BorderBrushProperty, TransparentBrush); dtTextBox.VisualTree = fefTextBox; gvcolumn.CellTemplate = dtTextBox; gridview.Columns.Add(gvcolumn); } else { gvcolumn.Width = 0; gridview.Columns.Add(gvcolumn); } } GridViewColumn buttonDetailColumn = new GridViewColumn(); DataTemplate dtButtonDetail = new DataTemplate(); dtButtonDetail.DataType = typeof(String); Button templateButton = new Button(); templateButton.Width = 50; FrameworkElementFactory fefForButton = new FrameworkElementFactory(typeof(Button)); fefForButton.SetValue(Button.ContentProperty, "..."); fefForButton.SetValue(Button.WidthProperty, templateButton.Width); Binding bdButton = new Binding(dataTable.Columns["DataSource"].ColumnName); fefForButton.SetBinding(Button.TagProperty, bdButton); fefForButton.AddHandler(Button.ClickEvent, new RoutedEventHandler(innerButtonInListView_Click)); Binding bindButtonDetail = new Binding(); fefForButton.SetBinding(TextBox.NameProperty, bindButtonDetail); dtButtonDetail.VisualTree = fefForButton; buttonDetailColumn.CellTemplate = dtButtonDetail; #region DataGrid menu ContextMenu contextMenuVisibleColumns = new ContextMenu(); MenuItem existingJazFiles = new MenuItem() { Header = "Existing Jaz files", IsEnabled = false }; MenuItem path = new MenuItem() { Header = "Path to page", IsEnabled = false }; MenuItem classNameMenuItem = new MenuItem() { Header = "Class name" }; MenuItem namespaceMenuItem = new MenuItem() { Header = "Namespace" }; MenuItem basePageMenuItem = new MenuItem() { Header = "Base page" }; contextMenuVisibleColumns.Items.Add(existingJazFiles); contextMenuVisibleColumns.Items.Add(path); contextMenuVisibleColumns.Items.Add(classNameMenuItem); contextMenuVisibleColumns.Items.Add(namespaceMenuItem); contextMenuVisibleColumns.Items.Add(basePageMenuItem); foreach (MenuItem contextItem in contextMenuVisibleColumns.Items) { contextItem.IsCheckable = true; contextItem.IsChecked = true; contextItem.Checked += new RoutedEventHandler(contextMenuStripDataGridView_CheckedChanged); contextItem.Unchecked += new RoutedEventHandler(contextMenuStripDataGridView_CheckedChanged); switch (contextItem.Header.ToString()) { case "Class name": contextItem.Tag = "Guessed class name"; break; case "Namespace": contextItem.Tag = "Guessed namespace"; break; case "Base page": contextItem.Tag = "Custom base page"; break; } } #endregion FrameworkElementFactory fefHeaderMenuButton = new FrameworkElementFactory(typeof(Button)); fefHeaderMenuButton.SetValue(Button.ContentProperty, "Details"); fefHeaderMenuButton.SetValue(Button.ContextMenuProperty, contextMenuVisibleColumns); fefHeaderMenuButton.SetValue(Button.BackgroundProperty, TransparentBrush); fefHeaderMenuButton.SetValue(Button.BorderBrushProperty, TransparentBrush); DataTemplate dtHeaderMenuButton = new DataTemplate(); dtHeaderMenuButton.VisualTree = fefHeaderMenuButton; buttonDetailColumn.HeaderTemplate = dtHeaderMenuButton; gridview.Columns.Add(buttonDetailColumn); listview.View = gridview; listview.SetBinding(ListView.ItemsSourceProperty, bind); listview.Focus(); #endregion //Content = listview; } catch (Exception ex) { MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message); } } }