Tuesday, August 12, 2014

How to add TreeViewItem dynamically in TreeView control in WPF?

How to add TreeViewItem dynamically in TreeView control in WPF. Here is the coding example given below to add TreeViewItem in TreeView control.


public TreeViewItem CreateTreeViewItem(string nodeName, string headerText, string frontImagePath, string tailImagePath, bool isCheckBoxRequired)
        {
            TreeViewItem treeViewItem = new TreeViewItem();
            try
            {
                StackPanel stackPanel = new StackPanel();
                Label lblHeaderText = new Label();
                Image imgFrontIcon, imgTailIcon;
                imgFrontIcon = new Image(); imgTailIcon = new Image();

                stackPanel.Orientation = Orientation.Horizontal;
                if (isCheckBoxRequired)
                {
                    CheckBox chkbox = new CheckBox();
                    chkbox.Name = IDPrefixForControls.Chk_.ToString() + nodeName;
                    chkbox.HorizontalAlignment = HorizontalAlignment.Center;
                    chkbox.VerticalAlignment = VerticalAlignment.Center;
                    stackPanel.Children.Add(chkbox);
                }
                if (frontImagePath != null && frontImagePath != string.Empty)
                {
                    Uri uri = new Uri(ConstantVariables.UriString + frontImagePath);
                    BitmapImage bitMapSource = new BitmapImage();
                    bitMapSource.BeginInit();
                    bitMapSource.UriSource = uri;
                    bitMapSource.EndInit();
                    imgFrontIcon.Source = bitMapSource;
                }
                if (tailImagePath != null && tailImagePath != string.Empty)
                {
                    Uri uri = new Uri(ConstantVariables.UriString + tailImagePath);
                    BitmapImage bitMapSource = new BitmapImage();
                    bitMapSource.BeginInit();
                    bitMapSource.UriSource = uri;
                    bitMapSource.EndInit();
                    imgTailIcon.Source = bitMapSource;
                }
                lblHeaderText.Content = headerText;
                stackPanel.Children.Add(imgFrontIcon);
                stackPanel.Children.Add(lblHeaderText);
                stackPanel.Children.Add(imgTailIcon);
                nodeName = nodeName.Replace("-", "_").Replace(" ", "_");
                treeViewItem.Name = nodeName;
                treeViewItem.Header = stackPanel;
            }
            catch (Exception ex)
            { LogExceptionDetails(ex); }
            return treeViewItem;
        }

Add Image column in Datagrid control dynamically in WPF

Here is the code example given to add Image column in Datagrid control dynamically at run time in WPF.

public void AddColumnsToDataGrid(DataGrid dataGrid, DataGridColumnType columnType, string headerText, string bindingName, string imagePath,
           )
        {
FrameworkElementFactory factoryElementStackPanelImages = AddMultipleImagesIntoOneColumn(imagePath);
                            DataTemplate dataTemplate = new DataTemplate();
                            dataTemplate.VisualTree = factoryElementStackPanelImages;

                            DataGridTemplateColumn dgTemplateColumn = new DataGridTemplateColumn();
                            dgTemplateColumn.Header = headerText;
                            dgTemplateColumn.CellTemplate = dataTemplate;
                            dgTemplateColumn.CellStyle = styleDataGridCell;
                            dataGrid.Columns.Add(dgTemplateColumn);
}

private FrameworkElementFactory AddMultipleImagesIntoOneColumn(string imagesSourcePath)
        {
            FrameworkElementFactory factoryElementStackPanel = new FrameworkElementFactory(typeof(StackPanel));
            try
            {
                string imagePath, imageName;
                factoryElementStackPanel.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);
                FrameworkElementFactory factoryImage;
                if (imagesSourcePath.Contains(ConstantVariables.CharacterValueHash))
                {
                    string[] arrImageSource = imagesSourcePath.Split(Convert.ToChar(ConstantVariables.CharacterValueHash));
                    foreach (string imgSource in arrImageSource)
                    {
                        if (imgSource.Contains(ConstantVariables.CharacterValueDollar))
                        {
                            string[] arrImagePathNName = imgSource.Split(Convert.ToChar(ConstantVariables.CharacterValueDollar));
                            imagePath = arrImagePathNName[0];
                            imageName = arrImagePathNName[1];
                        }
                        else
                        {
                            imagePath = imgSource;
                            imageName = string.Empty;
                        }
                        Uri uri = new Uri(ConstantVariables.UriString + imagePath);
                        BitmapImage bitMapSource = new BitmapImage();
                        bitMapSource.BeginInit();
                        bitMapSource.UriSource = uri;
                        bitMapSource.EndInit();
                        factoryImage = new FrameworkElementFactory(typeof(Image));
                        factoryImage.SetValue(Image.SourceProperty, bitMapSource);
                        factoryImage.SetValue(Image.WidthProperty, 15d);
                        factoryImage.SetValue(Image.HeightProperty, 15d);
                        factoryImage.SetValue(Image.MarginProperty, new Thickness(1));
                        if (!imageName.Equals(string.Empty))
                        {
                            factoryImage.SetValue(Image.NameProperty, imageName);
                            factoryImage.SetValue(Image.ToolTipProperty, imageName);
                        }
                        factoryElementStackPanel.AppendChild(factoryImage);
                        ImageColumnElement.Add(factoryImage);
                    }
                }
                else
                {
                    if (imagesSourcePath.Contains(ConstantVariables.CharacterValueDollar))
                    {
                        string[] arrImagePathNName = imagesSourcePath.Split(Convert.ToChar(ConstantVariables.CharacterValueDollar));
                        imagePath = arrImagePathNName[0];
                        imageName = arrImagePathNName[1];
                    }
                    else
                    {
                        imagePath = imagesSourcePath;
                        imageName = string.Empty;
                    }
                    Uri uri = new Uri(ConstantVariables.UriString + imagePath);
                    BitmapImage bitMapSource = new BitmapImage();
                    bitMapSource.BeginInit();
                    bitMapSource.UriSource = uri;
                    bitMapSource.EndInit();
                    factoryImage = new FrameworkElementFactory(typeof(Image));
                    factoryImage.SetValue(Image.SourceProperty, bitMapSource);
                    factoryImage.SetValue(Image.WidthProperty, 15d);
                    factoryImage.SetValue(Image.HeightProperty, 15d);
                    factoryImage.SetValue(Image.MarginProperty, new Thickness(1));

                    if (!imageName.Equals(string.Empty))
                    {
                        factoryImage.SetValue(Image.NameProperty, imageName);
                        factoryImage.SetValue(Image.ToolTipProperty, imageName);
                    }
                    factoryElementStackPanel.AppendChild(factoryImage);
                    ImageColumnElement.Add(factoryImage);
                }
            }
            catch (Exception ex)
            { LogExceptionDetails(ex); }
            return factoryElementStackPanel;
        }


Adding of Checkbox Column in Datagrid control in WPF

Some times we need to add some controls in a container at run time. Here is the coding logic given to add CheckBox column in Datagrid control dynamically at run time. This code logic is in context with WPF. for winforms the some classes may differ.

Example :

DataGridTemplateColumn dgTemplateColumn = new DataGridTemplateColumn();
                            
                            dgTemplateColumn.Header = headerText;

                            FrameworkElementFactory factoryElementCheckBox = new FrameworkElementFactory(typeof(CheckBox));
                            factoryElementCheckBox.SetBinding(CheckBox.IsCheckedProperty, new System.Windows.Data.Binding(bindingName));
                            factoryElementCheckBox.SetValue(CheckBox.NameProperty, bindingName);
                            factoryElementCheckBox.SetValue(CheckBox.HorizontalAlignmentProperty, HorizontalAlignment.Left);
                            factoryElementCheckBox.SetValue(CheckBox.VerticalAlignmentProperty, VerticalAlignment.Center);

                            CheckBoxColumnElement.Add(factoryElementCheckBox);

                            DataTemplate dataTemplate = new DataTemplate();
                            dataTemplate.VisualTree = factoryElementCheckBox;
                            dgTemplateColumn.CellTemplate = dataTemplate;
                            dgTemplateColumn.IsReadOnly = isReadOnly;
                            dataGrid.Columns.Add(dgTemplateColumn);
                            

Motivational qoutes

पूरे विश्वास के साथ अपने सपनों की तरफ बढ़ें। वही ज़िन्दगी जियें जिसकी कल्पना आपने की है।