⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 workitemvisualizer.xaml.cs

📁 wpf和cab的结合使用源码(转载)
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Practices.CompositeUI;
using Microsoft.Practices.CompositeUI.SmartParts;
using Microsoft.Practices.CompositeUI.Utility;
using Microsoft.Practices.ObjectBuilder;

namespace SampleVisualizations
{
	/// <summary>
	/// Interaction logic for WorkItemVisualizer.xaml
	/// </summary>

	public partial class WorkItemVisualizer : System.Windows.Controls.UserControl
	{
		private readonly IVisualizer _visualizer;

		public WorkItemVisualizer()
		{
			InitializeComponent();
		}

		[InjectionConstructor]
		public WorkItemVisualizer(WorkItem rootWorkItem, IVisualizer visualizer)
			: this()
		{
			_visualizer = visualizer;
			WorkItemAdded(this, new DataEventArgs<WorkItem>(visualizer.CabRootWorkItem));
			rootWorkItem.Workspaces["MainWorkspace"].Show(this, new SmartPartInfo("WorkItems", string.Empty));
		}

		private void AddTreeViewItem(ItemCollection items, WorkItem workItem)
		{
			bool firstChild = (items.Count == 0);
			WorkItemTreeViewItem item = new WorkItemTreeViewItem(workItem);
			items.Add(item);

			if (firstChild && (item.Parent is WorkItemTreeViewItem))
			{
				(item.Parent as WorkItemTreeViewItem).IsExpanded = true;
			}
		}

		private WorkItemTreeViewItem GetTreeViewItem(WorkItem workItem)
		{
			return GetTreeViewItem(workItem, _workItemsTreeView.Items);
		}

		private WorkItemTreeViewItem GetTreeViewItem(WorkItem workItem, ItemCollection items)
		{
			foreach (WorkItemTreeViewItem item in items)
			{
				if (item.WorkItem == workItem)
				{
					return item;
				}

				WorkItemTreeViewItem treeViewItem = GetTreeViewItem(workItem, item.Items);

				if (treeViewItem != null)
				{
					return treeViewItem;
				}
			}

			return null;
		}

		private void WorkItemAdded(object sender, DataEventArgs<WorkItem> e)
		{
			ItemCollection collection = null;
			WorkItem workItem = e.Data;

			if (workItem.Parent == null)
			{
				collection = _workItemsTreeView.Items;
			}
			else
			{
				WorkItemTreeViewItem item = GetTreeViewItem(workItem.Parent);

				if (item != null)
				{
					collection = item.Items;
				}
			}

			if (collection != null && workItem.WorkItems != null)
			{
				workItem.IdChanged += WorkItemIdChanged;
				workItem.Activated += WorkItemActivated;
				workItem.Deactivated += WorkItemDeactivated;
				workItem.WorkItems.Added += WorkItemAdded;
				workItem.WorkItems.Removed += WorkItemRemoved;

				AddTreeViewItem(collection, e.Data);
			}
		}

		private void WorkItemRemoved(object sender, DataEventArgs<WorkItem> e)
		{
			WorkItem workItem = e.Data;

			workItem.IdChanged -= WorkItemIdChanged;
			workItem.Activated -= WorkItemActivated;
			workItem.Deactivated -= WorkItemDeactivated;
			workItem.WorkItems.Added -= WorkItemAdded;
			workItem.WorkItems.Removed -= WorkItemRemoved;
			
			WorkItemTreeViewItem item = GetTreeViewItem(e.Data);

			if (item != null)
			{
				(item.Parent as ItemsControl).Items.Remove(item);
			}
		}

		private void WorkItemActivated(object sender, EventArgs e)
		{
			Update((WorkItem) sender);
		}

		private void WorkItemDeactivated(object sender, EventArgs e)
		{
			Update((WorkItem) sender);
		}

		private void WorkItemIdChanged(object sender, DataEventArgs<string> e)
		{
			Update((WorkItem) sender);
		}

		private void Update(WorkItem workItem)
		{
			WorkItemTreeViewItem item = GetTreeViewItem(workItem);

			if (item != null)
			{
				item.Update();
			}
		}

		private void _workItemsTreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
		{
			WorkItemTreeViewItem item = e.NewValue as WorkItemTreeViewItem;
			_propertyGrid.SelectedObject = item.WorkItem;
		}

		private sealed class WorkItemTreeViewItem : TreeViewItem
		{
			private readonly WorkItem _workItem;

			public WorkItem WorkItem
			{
				get
				{
					return _workItem;
				}
			}

			public WorkItemTreeViewItem(WorkItem workItem)
			{
				_workItem = workItem;
				Update();
			}

			public void Update()
			{
				Header = _workItem.GetType().Name + " - " + _workItem.ID;

				if (_workItem.Status == WorkItemStatus.Active)
				{
					Background = Brushes.Yellow;
				}
				else
				{
					Background = Brushes.White;
				}
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -