private void AddCppFileTreeViewItem(ProjectInfo projectInfo, TreeViewItem parentTreeViewItem, SolutionHierarchy.Item item) { const string kExcludeFromUnityBuild = "Exclude from Unity Build"; const string kIncludeInUnityBuild = "Include in Unity Build"; string cppFileName = item.Name; var treeViewItem = new TreeViewItem() { FontWeight = FontWeights.Normal }; treeViewItem.DataContext = item; treeViewItem.ContextMenu = new ContextMenu(); var checkBox = new CheckBox() { IsChecked = !_solutionSettings.IsExcludedCppFileNameForProject(projectInfo, cppFileName), VerticalAlignment = VerticalAlignment.Center }; var contextMenuItemExclude = new MenuItem() { Header = checkBox.IsChecked.Value ? kExcludeFromUnityBuild : kIncludeInUnityBuild, }; contextMenuItemExclude.Click += (sender, eventArgs) => { checkBox.IsChecked = !checkBox.IsChecked.Value; }; treeViewItem.ContextMenu.Items.Add(contextMenuItemExclude); checkBox.Checked += (sender, eventArgs) => { _solutionSettings.RemoveExcludedCppFileNameForProject(projectInfo, cppFileName); contextMenuItemExclude.Header = kExcludeFromUnityBuild; }; checkBox.Unchecked += (sender, eventArgs) => { _solutionSettings.ExcludeCppFileNameForProject(projectInfo, cppFileName); contextMenuItemExclude.Header = kIncludeInUnityBuild; }; var image = new Image() { Source = _solutionHierarchy.GetIcon(SolutionHierarchy.IconType.CppFile) }; var label = new Label() { Content = System.IO.Path.GetFileName(cppFileName) }; var stack = new StackPanel() { Orientation = Orientation.Horizontal, Margin = new Thickness(0, -2, 0, -2) }; stack.Children.Add(checkBox); stack.Children.Add(image); stack.Children.Add(label); treeViewItem.Header = stack; parentTreeViewItem.Items.Add(treeViewItem); }