using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using System.Windows.Media.Imaging;
using GDev.PopupBox;
namespace ComputerDropDragControl
{
/// <summary>
/// “机架”单元
/// 创建人:吴兆娟
/// 创建时间:2011-10-26
/// </summary>
public partial class RackUnit : UserControl
{
#region <<页面加载>>
/// <summary>
/// 页面加载事件
/// </summary>
public RackUnit(RowFrameView entity)
{
InitializeComponent();
FrameMsg = entity;
//加载控件
LoadControl();
}
#endregion
#region <<控件事件>>
#region <<拖拽相关事件>>
/// <summary>
/// “开始拖拽”
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dropDragPanel_ItemDragStarting(object sender, ItemDragEventArgs e)
{
StaticClass.FromList = false;
//2011-12-08修改
StaticClass.FromHandCar = false;
StaticClass.DragPanel = (PanelDragDropTarget)sender;
//2011-12-15修改,具体修改的原因见DroppedOnTarget事件中的描述
StaticClass.DrogPanelList = null;
StaticClass.DropPanel = null;
Dictionary<string, object> dic = GetDropDragPanelContentValues(StaticClass.DragPanel);
StackPanel stackContent = (StackPanel)(StaticClass.DragPanel.Content);
CU = (ComputerUnit)(stackContent.Children[3]);
CU.ShowTip = false;
NodeFrameView entity = new NodeFrameView(CU.ReturnNodeFrameView.NodeID, CU.ReturnNodeFrameView.NodeName,
CU.ReturnNodeFrameView.NodeSize, CU.ReturnNodeFrameView.NodeBeginUNo, CU.ReturnNodeFrameView.NodeEndUNo,
CU.ReturnNodeFrameView.FrameID);
StaticClass.CUStatic = new ComputerUnit(entity);
}
/// <summary>
/// “目标”即是“放”的对象Drop事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dropDragPanel_Drop(object sender, Microsoft.Windows.DragEventArgs e)
{
StaticClass.DropInHandCar = false;
//“放”
StaticClass.DropPanel = (PanelDragDropTarget)sender;
DropPanel = (PanelDragDropTarget)sender;
Dictionary<string, object> dicDrop = GetDropDragPanelContentValues((PanelDragDropTarget)sender);
//“放”对象的父对象
Grid fatherDropGrid = ((Grid)((PanelDragDropTarget)sender).Parent);
int tempDropCount = (fatherDropGrid.Children.Count() + 1) / 2;
PanelDragDropTarget dropPanelEnd = (PanelDragDropTarget)fatherDropGrid.Children[(tempDropCount - (int)dicDrop["RackUNo"]) * 2];
StackPanel stackDropEnd = (StackPanel)dropPanelEnd.Content;
TextBlock tbDropFrame = (TextBlock)stackDropEnd.Children[0];
//2011-12-08修改
#region <<“普通情况”>>
if (!StaticClass.FromList)
{
bool normalCondition = true;
//“拖”
StackPanel stackContent = (StackPanel)(StaticClass.DragPanel.Content);
CU = (ComputerUnit)(stackContent.Children[3]);
Dictionary<string, object> dicDrag = GetDropDragPanelContentValues(StaticClass.DragPanel);
//“拖”
Grid fatherDragGrid = (Grid)(StaticClass.DragPanel.Parent);
int tempDragCount = (fatherDragGrid.Children.Count() + 1) / 2;
StackPanel stackDragEnd = (StackPanel)StaticClass.DragPanel.Content;
TextBlock tbDragFrame = (TextBlock)stackDragEnd.Children[0];
TextBlock tbDragUNo = (TextBlock)stackDragEnd.Children[1];
TextBlock tbExist = (TextBlock)stackDragEnd.Children[2];
if (tbDropFrame.Text == tbDragFrame.Text)//同一个机器架内拖拽的业务逻辑
{
List<PanelDragDropTarget> listNeighborUp = new List<PanelDragDropTarget>();
for (int i = 1; i < CU.ReturnNodeFrameView.NodeSize; i++)
{
if ((tempDropCount - (int)dicDrag["RackUNo"] - i) * 2 > 2)//2011-12-07修改
{
PanelDragDropTarget panelTemp = (PanelDragDropTarget)fatherDragGrid.Children[(tempDropCount - (int)dicDrag["RackUNo"] - i) * 2];
StackPanel stackTemp = (StackPanel)panelTemp.Content;
TextBlock tbExistTemp = (TextBlock)stackTemp.Children[2];
TextBlock tbRackUNo = (TextBlock)stackTemp.Children[1];
if (tbExistTemp.Text == "false")
{
listNeighborUp.Add(panelTemp);
}
else
{
break;
}
}
}
foreach (PanelDragDropTarget panel in listNeighborUp)
{
if (panel == DropPanel)
{
normalCondition = false;
//MessageBox.Show("特殊的拆分模式!");
//2011-12-20修改
DepartUnit(StaticClass.DragPanel, dicDrag);
MergeUnit(StaticClass.DragPanel, dicDrop);
StaticClass.ExistPlace = true;
//2011-12-20修改
//UpdateData();
//UpdateCurrentCU();
return;
}
}
}
if (normalCondition)
{
//是否存在存储空间以及操作
WhetherExistPlace();
}
}
#endregion
#region <<“手推车”以及“查询未上架设备”>>
else
{
ListBox list = (ListBox)StaticClass.DragPanelList.Content;
ListBoxItem selectItem = (ListBoxItem)list.SelectedItem;
SelectItem = selectItem;
SelectIndex = list.SelectedIndex;
//2011-12-08修改
//在是“查询未上架的设备”的时候,并不能确定设备的NodeSize。所以呢,不能生成设备
if (StaticClass.FromHandCar)
{
//2011-12-08修改
//至于为什么要在Drop的时候就生成了CU,是可以用也可以不用,但是这样整个代码操作比较的统一,
NodeFrameView entity = (NodeFrameView)selectItem.DataContext;
ComputerUnit cu = new ComputerUnit(entity);
cu.ShowTip = true;
CU = cu;
}
//是否存在存储空间以及操作
WhetherExistPlace();
}
#endregion
}
/// <summary>
/// “拖对象放至目标对象后”发生的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dropDragPanel_ItemDroppedOnTarget(object sender, ItemDragEventArgs e)
{
if (StaticClass.DropInHandCar)//置入“手推车”
{
//2011-12-15修改,因为有这样的操作步骤,先是移入手推车,再是没有把设备没有移入任何
//一个DropPanel中,但是呢此时StaticClass.DropInHandCar的值为true,也就进入了方法体,于是有不想看到的错误。
if (StaticClass.DrogPanelList != null)
{
//2011-12-20修改
//拖
Dictionary<string, object> dicDrag = GetDropDragPanelContentValues(StaticClass.DragPanel);
DepartUnit(StaticClass.DragPanel, dicDrag);
ListBoxDragDropTarget listDropPanel = (ListBoxDragDropTarget)StaticClass.DrogPanelList;
ListBox lb = (ListBox)listDropPanel.Content;
int count = lb.Items.Count;
lb.Items.Remove(CU);
//2011-12-15修改
StaticClass.HandCarList.Add(CU.ReturnNodeFrameView.NodeID);
//StaticClass.DropInHandCar = false;//2011-12-08修改
}
}
else if (StaticClass.DropInRecyle)//置入“回收站”
{
//2011-12-15修改,因为有这样的操作步骤,先是移入手推车,再是没有把设备没有移入任何
//一个DropPanel中,但是呢此时StaticClass.DropInHandCar的值为true,也就进入了方法体,于是有不想看到的错误。
//遇上面的置入“手推车”是同样的道理
if (StaticClass.DrogPanelList != null)
{
//拖
Dictionary<string, object> dicDrag = GetDropDragPanelContentValues(StaticClass.DragPanel);
DepartUnit(StaticClass.DragPanel, dicDrag);
ListBoxDragDropTarget listDropPanel = (ListBoxDragDropTarget)StaticClass.DrogPanelList;
ListBox lb = (ListBox)listDropPanel.Content;
int count = lb.Items.Count;
lb.Items.RemoveAt(count - 1);
//StaticClass.DropInRecyle = false;//2011-12-08修改
}
}
else//“普通”情况
{
//存在这样的情况,先是移入U中,此时StaticClass.DropPanel不为NULL,进入,其实这样写最后结果是对了,但是有点不规范以及
//顺理成章
if (StaticClass.DropPanel != null)
{
#region
//2011-12-20修改
//现在Drop事件中,只判断是否存在空间,不做Merge以及Depart的操作
//在updateData成功后才做操作
//也就是DropPanel在不存在空间ExistPlace=false时AllowDrop=true;
//DropPanel在存在空间ExistPlace=true时【原来Merge后AllowDrop=false】,【现在不进行Merge,AllowDrop=true;】
//对于DropPanel中原先AllowDrop=false的,首先DropPanel是为null的,再者AllowDrop=false;
#endregion
if (StaticClass.DropPanel.AllowDrop)//“不存在空间”的话,没有进行Merge以及Depart的操作,所以AllowDrop=true;
//这句可有可无,其实貌似不写比较的规范
{
if (!StaticClass.ExistPlace)//不存在空间
{
CancelBehavior();
}
}
else
{
#region <<2011-12-20修改,存在空间>>
UpdateData();
#endregion
}
}
CU.ShowTip = true;
}
}
#endregion
/// <summary>
/// “模态窗口关闭”时发生
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cr_Closed(object sender, EventArgs e)
{
CWInRack cr = (CWInRack)sender;
if (StaticClass.DropPanel != null)
{
if (!StaticClass.DropPanel.AllowDrop)
{
//2011-12-08修改
//修改原因:已经在DroppedOnTarget事件中处理了
//((StackPanel)StaticClass.DropPanel.Content).Children.Remove(SelectItem);//模态窗口发生关闭的时候移除了SelectITem
if (cr.DialogResult == false)
{
//拆分单元格
//DepartUnit(StaticClass.DropPanel);
((StackPanel)StaticClass.DropPanel.Content).Children.RemoveAt(3);
StaticClass.DropPanel.AllowDrop = true;
ListBox list = (ListBox)StaticClass.DragPanelList.Content;
list.Items.Insert(SelectIndex, SelectItem);
}
if (cr.DialogResult == true)//Drop的时候“设备已经被移走了”。
{
//if (StaticClass.FromHandCar)
//{
// foreach (ListBoxItem item in StaticClass.HandCarList)//“手推车”
// {
// if (item.Name == SelectItem.Name)
// {
// StaticClass.HandCarList.Remove(item);
// return;
// }
// }
//}
//数据库交互
}
StaticClass.FromHandCar = false;
}
}
}
#endregion
#region <<辅助方法>>
/// <summary>
/// 打开模态窗口
/// </summary>
private void OpenChildWindow()
{
CWInRack cr = new CWInRack();
cr.OverlayOpacity = 0.1;
cr.Height = 300;
cr.Width = 500;
//cr.Content = tempFrame;
try
{
cr.Show();
}
catch (Exception ex)
{
}
cr.Closed += new EventHandler(cr_Closed);
}
/// <summary>
/// 更新数据库
/// </summary>
private void UpdateData()
{
//2011-12-20修改
#region <<数据库交互>>
//2011-12-20修改
//StackPanel stackDrop = (StackPanel)DropPanel.Content;
StackPanel stackDrop = (StackPanel)StaticClass.DropPanel.Content;
NodeFrameView entity = new NodeFrameView(CU.ReturnNodeFrameView.NodeID,
CU.ReturnNodeFrameView.NodeName, CU.ReturnNodeFrameView.NodeSize,
int.Parse(((TextBlock)stackDrop.Children[1]).Text) - CU.ReturnNodeFrameView.NodeSize + 1,
int.Parse(((TextBlock)stackDrop.Children[1]).Text), ((TextBlock)stackDrop.Children[0]).Text);
isSuccess = true;
MessageBox.Show("上架成功d");
#endregion
#region
//StackPanel stackDrop = (StackPanel)DropPanel.Content;
//CU.ReturnNodeFrameView.FrameID = ((TextBlock)stackDrop.Children[0]).Text;
//CU.ReturnNodeFrameView.NodeEndUNo = int.Parse(((TextBlock)stackDrop.Children[1]).Text);
//CU.ReturnNodeFrameView.NodeBeginUNo = int.Parse(((TextBlock)stackDrop.Children[1]).Text) - CU.ReturnNodeFrameView.NodeSize + 1;
//建立“设备”和“机架”新关系
//MessageBox.Show(CU.ReturnNodeFrameView.FrameID + "------" + CU.ReturnNodeFrameView.NodeBeginUNo.ToString() + "-------" + CU.ReturnNodeFrameView.NodeEndUNo.ToString());
#endregion
#region <<2011-12-20修改>>
if (isSuccess)
{
#region
//#region <<Drop对象>>
“放”
//StaticClass.DropPanel = (PanelDragDropTarget)sender;
//DropPanel = (PanelDragDropTarget)sender;
//Dictionary<string, object> dicDrop = GetDropDragPanelContentValues((PanelDragDropTarget)sender);
“放”对象的父对象
//Grid fatherDropGrid = ((Grid)((PanelDragDropTarget)sender).Parent);
//int tempDropCount = (fatherDropGrid.Children.Count() + 1) / 2;
//PanelDragDropTarget dropPanelEnd = (PanelDragDropTarget)fatherDropGrid.Children[(tempDropCount - (int)dicDrop["RackUNo"]) * 2];
//StackPanel stackDropEnd = (StackPanel)dropPanelEnd.Content;
//TextBlock tbDropFrame = (TextBlock)stackDropEnd.Children[0];
//#endregion
//MergeUnit(DropPanel, dicDrop);
//if (!StaticClass.FromHandCar)//“普通情况”
//{
// DepartUnit(StaticClass.DragPanel);
//}
//else//来自“手推车”
//{
// stackDropEnd.Children.Add(CU);
//}
//UpdateCurrentCU();
#endregion
UpdateCurrentCU();
}
else
{
//拖
Dictionary<string, object> dicDrag = GetDropDragPanelContentValues(StaticClass.DragPanel);
//“放”
Dictionary<string, object> dicDrop = GetDropDragPanelContentValues(StaticClass.DropPanel);
//2011-12-20修改
//这边注意下“拆分”与“合并”的顺序问题,
//因为若是先合并,在拆分,两个方法有重叠的地方,也就是对于其中一个DropPanel,先是Collapsed后是Visible,导致设备
//显示的时候被遮挡,若是先拆分,再是合并的话就能避免这样的问题。
DepartUnit(StaticClass.DropPanel, dicDrop);//拆分“放”
MergeUnit(StaticClass.DragPanel, dicDrag);//合并“拖”
CancelBehavior();
MessageBox.Show("需要Depart和Merge");
}
#endregion
}
//2011-12-14修改
/// <summary>
/// 更新“移动设备”中ReturnNideFrameView信息
/// </summary>
private void UpdateCurrentCU()
{
StackPanel stackDrop = (StackPanel)DropPanel.Content;
CU.ReturnNodeFrameView.FrameID = ((TextBlock)stackDrop.Children[0]).Text;
CU.ReturnNodeFrameView.NodeEndUNo = int.Parse(((TextBlock)stackDrop.Children[1]).Text);
CU.ReturnNodeFrameView.NodeBeginUNo = int.Parse(((TextBlock)stackDrop.Children[1]).Text) - CU.ReturnNodeFrameView.NodeSize + 1;
}
/// <summary>
/// 判断是否存在存储空间以及相关操作
/// </summary>
private void WhetherExistPlace()
{
try
{
//“放”
Dictionary<string, object> dicDrop = GetDropDragPanelContentValues(DropPanel);
//“拖”
Dictionary<string, object> dicDrag = GetDropDragPanelContentValues(StaticClass.DragPanel);
Grid fatherDropGrid = (Grid)(DropPanel.Parent);
int tempDropCount = (fatherDropGrid.Children.Count() + 1) / 2;
PanelDragDropTarget dropPanelEnd = (PanelDragDropTarget)fatherDropGrid.Children[(tempDropCount - (int)dicDrop["RackUNo"]) * 2];
StackPanel stackDropEnd = (StackPanel)dropPanelEnd.Content;
TextBlock tbDropFrame = (TextBlock)stackDropEnd.Children[0];
#region <<判断是否有足够空间>>
#region <<普通情况+手推车,知道NodeSize,未上架的设备是不知道NodeSize的>>
if (!StaticClass.FromList || StaticClass.FromHandCar) //2011-12-08修改
{
if (CU.ReturnNodeFrameView.NodeSize == 1)
{
if (((TextBlock)stackDropEnd.Children[2]).Text == "true")
{
MessageBox.Show("没有足够的空间!");
StaticClass.ExistPlace = false;
return;
}
else
{
StaticClass.ExistPlace = true;
#region <<2011-12-20修改>>
MergeUnit(DropPanel, dicDrop);
if (!StaticClass.FromHandCar)//“普通情况”
{
DepartUnit(StaticClass.DragPanel, dicDrag);
}
else//来自“手推车”
{
stackDropEnd.Children.Add(CU);
}
//UpdateData();
//UpdateCurrentCU();
#endregion
}
}
else
{
for (int i = 1; i < CU.ReturnNodeFrameView.NodeSize; i++)
{
//2011-12-08
//循环的次数是NodeSize-1次
//1.检验Drop向下的Drop是否存在,
//2.(tempDropCount - (int)dicDrop["RackUNo"] + i) * 2 代表Drop下i个Drop是否存在,
//tempDropCount * 2 - 1代表Drop所在Grid总共的Children个数
//3.若是还在循环内,Drop下没有越界的Drop中有设备,则不存在存储空间
//4.越界的话就不进入进行判断;
if ((tempDropCount - (int)dicDrop["RackUNo"] + i) * 2 <= tempDropCount * 2 - 1)
{
PanelDragDropTarget dropPanelTempOne = (PanelDragDropTarget)fatherDropGrid.Children[(tempDropCount - (int)dicDrop["RackUNo"] + i) * 2];
StackPanel stackDropPanelOne = (StackPanel)dropPanelTempOne.Content;
TextBlock tbExistComputer = (TextBlock)stackDropPanelOne.Children[2];
if (tbExistComputer.Text == "true")
{
MessageBox.Show("没有足够的空间!");
StaticClass.ExistPlace = false;
return;
}
}
#region <<可以进行优化的算法 2011-12-08>>
else
{
MessageBox.Show("没有足够的空间!");
StaticClass.ExistPlace = false;
return;
}
#endregion
//下面的代码是循环至最后,首先判断(tempDropCount - (int)dicDrop["RackUNo"] + i) * 2代表最后一个Drop是
//Drop所在Grid的第几个Children,
//tempDropCount * 2 - 1是表示Drop所在的Grid总共的Children的个数,
//1.先判断是否越界,越界的话肯定
if (i == CU.ReturnNodeFrameView.NodeSize - 1)
{
#region
//if ((tempDropCount - (int)dicDrop["RackUNo"] + i) * 2 > tempDropCount * 2 - 1)
//{
// MessageBox.Show("没有足够的空间!");
// StaticClass.ExistPlace = false;
// return;
//}
//else
//{
#endregion
if ((tempDropCount - (int)dicDrop["RackUNo"] + i) * 2 <= tempDropCount * 2 - 1)//再保险下
{
StaticClass.ExistPlace = true;
#region <<2011-12-20修改>>
//合并单元格
MergeUnit(DropPanel, dicDrop);
//2011-12-08修改
//if (!StaticClass.FromList)
//{
if (!StaticClass.FromHandCar)
{
//拆分单元格
DepartUnit(StaticClass.DragPanel, dicDrag);
}
else
{
stackDropEnd.Children.Add(CU);
}
#region
//}
//else
//{
// stackDropEnd.Children.Add(CU);
// if (!StaticClass.FromHandCar)//2011-12-07添加,
// {
// //打开模态窗口填写信息
// //OpenChildWindow();
// ShowOnFrameWindow();
// }
//}
//2011-12-14修改
数据库操作
//UpdateData();
//2011-12-08修改
//StaticClass.FromList = false;
//StaticClass.FromHandCar = false;//2011-12-07添加
#endregion
//UpdateData();
//UpdateCurrentCU();
#endregion
}
}
}
}
}
#endregion
//2011-12-08 修改
#region <<来自“查询未上架设备”>>
else
{
//获取目标Drop下连续的没有设备的U单位的个数
CheckExistUCount();
ShowOnFrameWindow();
//MessageBox.Show("未上架设备");
}
#endregion
#endregion
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
#region <<上架相关 2011-12-08>>
private int ExistUCount = 1;
/// <summary>
/// 获取目标Drop下连续的没有设备的U单位的个数
/// 2011-12-08修改
/// </summary>
private void CheckExistUCount()
{
//“放”
Dictionary<string, object> dicDrop = GetDropDragPanelContentValues(DropPanel);
Grid fatherDropGrid = (Grid)(DropPanel.Parent);
int tempDropCount = (fatherDropGrid.Children.Count() + 1) / 2;
PanelDragDropTarget dropPanelEnd = (PanelDragDropTarget)fatherDropGrid.Children[(tempDropCount - (int)dicDrop["RackUNo"]) * 2];
StackPanel stackDropEnd = (StackPanel)dropPanelEnd.Content;
TextBlock tbDropFrame = (TextBlock)stackDropEnd.Children[0];
for (int i = 1; ; i++)//循环无数次,遇到一定的条件后退出
{
if ((tempDropCount - (int)dicDrop["RackUNo"] + i) * 2 <= tempDropCount * 2 - 1)//不越界
{
PanelDragDropTarget dropPanelTempOne = (PanelDragDropTarget)fatherDropGrid.Children[(tempDropCount - (int)dicDrop["RackUNo"] + i) * 2];
StackPanel stackDropPanelOne = (StackPanel)dropPanelTempOne.Content;
TextBlock tbExistComputer = (TextBlock)stackDropPanelOne.Children[2];
if (tbExistComputer.Text == "false")//不存在设备
{
ExistUCount = ExistUCount + 1;
}
else//存在设备
{
return;
}
}
else//越界
{
return;
}
}
}
/// <summary>
/// “上架”
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ShowOnFrameWindow()
{
//弹出“模态信息”窗口
PopupService service = PopupService.GetServiceFor((Grid)StaticClass.UIRoot);
MessagePageOnFrame box = service.GetMessagePageOnFrame(
"上架",
new OnFrameContent(),
"上架",
true,
(MessageBoxButtonType)Enum.Parse(
typeof(MessageBoxButtonType),
"YesNo",
true),
null,
SelectItem.Content.ToString(),
ExistUCount,
StaticClass.DragPanelList,
StaticClass.DropPanel
);
box.Effect = GDev.PopupBox.Effect.NoEffect(box);
box.ShowComplete += new EventHandler(Box_ShowComplete);
box.ButtonClick += new EventHandler(Box_ButtonClick);
box.ShowAsModal();
}
//2011-12-08
private void Box_ButtonClick(object sender, EventArgs e)
{
//“放”
Dictionary<string, object> dicDrop = GetDropDragPanelContentValues(DropPanel);
MessagePageOnFrame mp = (MessagePageOnFrame)sender;
//页面保存时进行的是数据库中操作,返回了“成功”以及“不成功”的情况
//之后进行的就是界面的添加“设备的操作”
//上架成功,生成设备
if (((MessagePageOnFrame)sender).Result == MessageBoxButtonResult.Yes)
{
NodeFrameView nv = new NodeFrameView("", SelectItem.Content.ToString(), mp.ComputerEntity.NodeSize,
mp.ComputerEntity.NodeBeginUNo, mp.ComputerEntity.NodeEndUNo, mp.ComputerEntity.FrameID);
ComputerUnit cu = new ComputerUnit(nv);
cu.ShowTip = true;
CU = cu;
StackPanel stackDrop = (StackPanel)DropPanel.Content;
stackDrop.Children.Add(CU);
//合并单元格
MergeUnit(DropPanel, dicDrop);
//2011-12-14修改
//貌似在创建设备的时候已经对ReturnFrameView的值进行了赋值,不需要在进行数据库交互了。
数据交互
//UpdateData();
}
//上架失败后的取消或是关闭,不生成设备,并且向DragList中添加原来的项
if (((MessagePageOnFrame)sender).Result == MessageBoxButtonResult.No)
{
ListBox list = (ListBox)StaticClass.DragPanelList.Content;
list.Items.Insert(SelectIndex, SelectItem);
((MessagePageOnFrame)sender).Close();
}
}
private void Box_ShowComplete(object sender, EventArgs e)
{
//MessageText.Text = "打开了新窗口";
}
#endregion
/// <summary>
/// “合并单元格”
/// </summary>
/// <param name="panel"></param>
private void MergeUnit(PanelDragDropTarget panel, Dictionary<string, object> dicDrop)
{
Grid fatherDropGrid = (Grid)(panel.Parent);
int tempDropCount = (fatherDropGrid.Children.Count() + 1) / 2;
PanelDragDropTarget dropPanelEnd = (PanelDragDropTarget)fatherDropGrid.Children[(tempDropCount - (int)dicDrop["RackUNo"]) * 2];
dropPanelEnd.AllowDrop = false;
dropPanelEnd.SetValue(Grid.RowSpanProperty, CU.ReturnNodeFrameView.NodeSize);
StackPanel stackDropEnd = (StackPanel)dropPanelEnd.Content;
stackDropEnd.Height = 40 * CU.ReturnNodeFrameView.NodeSize;
TextBlock tbDropFrame = (TextBlock)stackDropEnd.Children[0];
for (int j = 1; j < CU.ReturnNodeFrameView.NodeSize; j++)
{
PanelDragDropTarget dropPanelTemp = (PanelDragDropTarget)fatherDropGrid.Children[(tempDropCount - (int)dicDrop["RackUNo"] + j) * 2];
dropPanelTemp.Visibility = Visibility.Collapsed;
dropPanelTemp.AllowDrop = false;
StackPanel stackTemp = (StackPanel)dropPanelTemp.Content;
((TextBlock)stackTemp.Children[2]).Text = "true";
}
#region <<修改偷藏值>>
((TextBlock)stackDropEnd.Children[2]).Text = "true";
#endregion
}
/// <summary>
/// 2011-12-20修改
/// “拆分单元格”
/// </summary>
/// <param name="panel"></param>
private void DepartUnit(PanelDragDropTarget panel, Dictionary<string, object> dicDrag)
{
//“拖”的父对象
Grid fatherDragGrid = (Grid)(panel.Parent);
int tempCount = (fatherDragGrid.Children.Count() + 1) / 2;
//2011-12-20修改
//PanelDragDropTarget dragPanelEnd = (PanelDragDropTarget)fatherDragGrid.Children[(tempCount - CU.ReturnNodeFrameView.NodeEndUNo) * 2];
PanelDragDropTarget dragPanelEnd = (PanelDragDropTarget)fatherDragGrid.Children[(tempCount - (int)dicDrag["RackUNo"]) * 2];
dragPanelEnd.AllowDrop = true;
dragPanelEnd.SetValue(Grid.RowSpanProperty, 1);
StackPanel stackDragEnd = (StackPanel)dragPanelEnd.Content;
stackDragEnd.Height = 40;//单位长度
for (int i = 1; i < CU.ReturnNodeFrameView.NodeSize; i++)
{
//2011-12-20修改
//PanelDragDropTarget dropDragPanelTemp =
// (PanelDragDropTarget)fatherDragGrid.Children[(tempCount - CU.ReturnNodeFrameView.NodeEndUNo + i) * 2];
PanelDragDropTarget dropDragPanelTemp =
(PanelDragDropTarget)fatherDragGrid.Children[(tempCount - (int)dicDrag["RackUNo"] + i) * 2];
dropDragPanelTemp.Visibility = Visibility.Visible;
dropDragPanelTemp.AllowDrop = true;
StackPanel stackTemp = (StackPanel)dropDragPanelTemp.Content;
((TextBlock)stackTemp.Children[2]).Text = "false";
}
#region <<修改偷藏值>>
((TextBlock)stackDragEnd.Children[2]).Text = "false";
#endregion
}
/// <summary>
/// “取消拖拽操作”
/// </summary>
private void CancelBehavior()
{
((StackPanel)StaticClass.DropPanel.Content).Children.RemoveAt(3);
((StackPanel)StaticClass.DragPanel.Content).Children.Add(CU);
StaticClass.DropPanel.AllowDrop = true;
StaticClass.DragPanel.AllowDrop = false;
}
/// <summary>
/// 获取DropDragPanel中值信息
/// </summary>
/// <param name="panel"></param>
/// <returns></returns>
private Dictionary<string, object> GetDropDragPanelContentValues(PanelDragDropTarget panel)
{
Dictionary<string, object> dic = new Dictionary<string, object>();
StackPanel aimStack = (StackPanel)panel.Content;
#region<<偷藏的一些设备以及机架信息赋值>>
string computerFrame = ((TextBlock)aimStack.Children[0]).Text;
int rackUNo = int.Parse(((TextBlock)aimStack.Children[1]).Text);
string existComputer = ((TextBlock)aimStack.Children[2]).Text;
#endregion
dic.Add("FrameID", computerFrame);
dic.Add("RackUNo", rackUNo);
dic.Add("ExistComputer", existComputer);
return dic;
}
#region <<加载界面相关>>
/// <summary>
/// 加载控件
/// </summary>
private void LoadControl()
{
ColumnDefinition c1 = new ColumnDefinition();
c1.Width = new GridLength(40);
ColumnDefinition c2 = new ColumnDefinition();
c2.Width = new GridLength(1);
ColumnDefinition c3 = new ColumnDefinition();
c3.Width = new GridLength(90);
LayoutRoot.ColumnDefinitions.Add(c1);
LayoutRoot.ColumnDefinitions.Add(c2);
LayoutRoot.ColumnDefinitions.Add(c3);
LayoutRoot.Width = 131;
LayoutRoot.HorizontalAlignment = HorizontalAlignment.Left;
LayoutRoot.ShowGridLines = false;
LayoutRoot.Height = 23 * (FrameMsg.TotalUCount + 1) + 5;
borderOne.Height = 23 * (FrameMsg.TotalUCount + 1) + 5;
recOne.Height = 23 * (FrameMsg.TotalUCount + 1) - 5;
recOne.Width = 131;
for (int i = FrameMsg.TotalUCount + 2; i >= 1; i--)
{
RowDefinition rd = new RowDefinition();
rd.Height = new GridLength(23);
LayoutRoot.RowDefinitions.Add(rd);
if (i == FrameMsg.TotalUCount + 2)//“头”
{
//StackPanel stackHeader = new StackPanel();
//stackHeader.Background = new SolidColorBrush(Color.FromArgb(255, 56, 55, 55));
#region
//LinearGradientBrush header = new LinearGradientBrush();
//header.StartPoint = new Point(0, 0);
//header.EndPoint = new Point(0, 1);
//GradientStopCollection headStopCol = new GradientStopCollection();
//GradientStop gsOne = new GradientStop();
//gsOne.Color = Color.FromArgb(255, 134, 134, 134);
//gsOne.Offset = 0;
//GradientStop gsTwo = new GradientStop();
//gsTwo.Color = Color.FromArgb(255, 134, 134, 134);
//gsTwo.Offset = 0.5;
//GradientStop gsThree = new GradientStop();
//gsThree.Color = Color.FromArgb(255, 89, 89, 89);
//gsThree.Offset = 0.5;
//GradientStop gsFour = new GradientStop();
//gsFour.Color = Color.FromArgb(255, 89, 89, 89);
//gsFour.Offset = 1;
//headStopCol.Add(gsOne);
//headStopCol.Add(gsTwo);
//headStopCol.Add(gsThree);
//headStopCol.Add(gsFour);
//header.GradientStops = headStopCol;
//stackHeader.Background = header;
#endregion
//stackHeader.SetValue(Grid.RowProperty, 0);
//stackHeader.SetValue(Grid.ColumnSpanProperty, 3);
//stackHeader.Height = 33;
//TextBlock tbHeader = new TextBlock();
//tbHeader.Text = FrameMsg.FrameName;
//tbHeader.Foreground = new SolidColorBrush(Colors.White);
//tbHeader.TextAlignment = TextAlignment.Center;
//tbHeader.VerticalAlignment = VerticalAlignment.Center;
//tbHeader.SetValue(Grid.RowProperty, 0);
//tbHeader.SetValue(Grid.ColumnSpanProperty, 3);
//LayoutRoot.Children.Add(tbHeader);
//tbHeader.Margin = new Thickness(0, 5, 0, 0);
//stackHeader.Children.Add(tbHeader);
rd.Height = new GridLength(28);
Button btnHead = new Button();
btnHead.Content = FrameMsg.FrameName;
btnHead.SetValue(Grid.RowProperty, 0);
btnHead.SetValue(Grid.ColumnSpanProperty, 3);
LayoutRoot.Children.Add(btnHead);
}
else if (i == FrameMsg.TotalUCount + 1)//“横间隔”以及“竖间隔”
{
rd.Height = new GridLength(1);
Border borderSeperateH = new Border();
borderSeperateH.SetValue(Grid.RowProperty, 1);
borderSeperateH.SetValue(Grid.ColumnSpanProperty, 3);
borderSeperateH.Background = new SolidColorBrush(Colors.Black);
LayoutRoot.Children.Add(borderSeperateH);
Border borderSeperateV = new Border();
borderSeperateV.SetValue(Grid.RowProperty, 2);
borderSeperateV.SetValue(Grid.ColumnProperty, 1);
borderSeperateV.Background = new SolidColorBrush(Colors.Black);
borderSeperateV.SetValue(Grid.RowSpanProperty, FrameMsg.TotalUCount);//跨行操作
LayoutRoot.Children.Add(borderSeperateV);
}
else//2011-12-14修改,加载“电源”“KVM”,其中比较特殊的是“设备”,不作为Frame机架的属性进行绑定,
//特殊的是“电源”“KVM”作为了机架的属性在此进行加载。
{
StackPanel stackUNo = new StackPanel();
stackUNo.SetValue(Grid.RowProperty, FrameMsg.TotalUCount - i + 2);//第一行:表头,第二行:间隔,第三行:编号开始了1
stackUNo.SetValue(Grid.ColumnProperty, 0);
TextBlock tbRackNum = new TextBlock();
tbRackNum.Text = i.ToString();
tbRackNum.Foreground = new SolidColorBrush(Colors.Black);
tbRackNum.TextAlignment = TextAlignment.Center;
//tbRackNum.VerticalAlignment = VerticalAlignment.Center;
//tbRackNum.SetValue(Grid.RowProperty, FrameMsg.TotalUCount - i + 2);
//tbRackNum.SetValue(Grid.ColumnProperty, 0);
//LayoutRoot.Children.Add(tbRackNum);
tbRackNum.Margin = new Thickness(0, 5, 0, 0);
stackUNo.Children.Add(tbRackNum);
LayoutRoot.Children.Add(stackUNo);
PanelDragDropTarget dropDrapPanel = new PanelDragDropTarget();
dropDrapPanel.AllowDrop = true;
dropDrapPanel.SetValue(Grid.RowProperty, FrameMsg.TotalUCount - i + 2);
dropDrapPanel.SetValue(Grid.ColumnProperty, 2);
StackPanel stackOne = new StackPanel();
stackOne.Height = 23;
stackOne.Width = 90;
if ((i - 1) % 2 == 0)
{
//stackUNo.Background = new SolidColorBrush(Color.FromArgb(255, 204, 222, 237));
stackOne.Background = new SolidColorBrush(Colors.LightGray);
}
else
{
//stackUNo.Background = new SolidColorBrush(Colors.White);
stackOne.Background = new SolidColorBrush(Colors.White);
}
#region<<偷藏的一些设备以及机架信息>>
TextBlock hidFrameID = new TextBlock();//设备所在机架FrameID
hidFrameID.Visibility = Visibility.Collapsed;
hidFrameID.Text = FrameMsg.FrameID;//2011-12-08修改
TextBlock hidUNo = new TextBlock();//机架U单位编号
hidUNo.Visibility = Visibility.Collapsed;
hidUNo.Text = tbRackNum.Text;
TextBlock hidExistComputer = new TextBlock();//机架U中是否存在设备
hidExistComputer.Visibility = Visibility.Collapsed;
hidExistComputer.Text = "false";
stackOne.Children.Add(hidFrameID);
stackOne.Children.Add(hidUNo);
stackOne.Children.Add(hidExistComputer);
#endregion
dropDrapPanel.Content = stackOne;
#region <<订阅拖拽事件>>
dropDrapPanel.ItemDroppedOnTarget += new EventHandler<ItemDragEventArgs>(dropDragPanel_ItemDroppedOnTarget);
dropDrapPanel.Drop += new Microsoft.Windows.DragEventHandler(dropDragPanel_Drop);
dropDrapPanel.ItemDragStarting += new EventHandler<ItemDragEventArgs>(dropDragPanel_ItemDragStarting);
#endregion
#region <<2011-12-14修改>>
#region <<电源个数是1的时候>>
if (FrameMsg.ElectricNo == 1)//表示“有电源的存在”
{
if (i == FrameMsg.TotalUCount)//“只在第二行的时候进行设置,其余时候不管的哦”
{
//Image electricImg = new Image();
//electricImg.Width = 90;
//electricImg.Height = 23 * FrameMsg.ElectricCount;
//electricImg.VerticalAlignment = VerticalAlignment.Top;
//electricImg.Source = new BitmapImage(new Uri("Img/Electric.png", UriKind.Relative));
//electricImg.Stretch = Stretch.Uniform;
dropDrapPanel.SetValue(Grid.RowSpanProperty, FrameMsg.ElectricCount);
dropDrapPanel.IsEnabled = false;
ImageBrush iBrush = new ImageBrush();
iBrush.ImageSource = new BitmapImage(new Uri("Img/Electric.png", UriKind.Relative));
stackOne.Background = iBrush;
stackOne.Height = 23 * FrameMsg.ElectricCount;
TextBlock tbElectric = new TextBlock();
tbElectric.Text = "电源";
tbElectric.Foreground = new SolidColorBrush(Colors.Black);
tbElectric.TextAlignment = TextAlignment.Center;
tbElectric.Height = 23;
tbElectric.Margin = new Thickness(0, 23 * FrameMsg.ElectricCount / 2 - tbElectric.Height / 2, 0, 0);
stackOne.Children.Add(tbElectric);
}
if (i > FrameMsg.TotalUCount - FrameMsg.ElectricCount && i < FrameMsg.TotalUCount)
{
dropDrapPanel.Visibility = Visibility.Collapsed;
dropDrapPanel.AllowDrop = false;
}
}
#endregion
#region <<电源个数是2的时候>>
if (FrameMsg.ElectricNo == 2)
{
if (i == FrameMsg.TotalUCount)//“只在第二行的时候进行设置”
{
dropDrapPanel.SetValue(Grid.RowSpanProperty, FrameMsg.ElectricCount / 2);
dropDrapPanel.IsEnabled = false;
ImageBrush iBrush = new ImageBrush();
iBrush.ImageSource = new BitmapImage(new Uri("Img/Electric.png", UriKind.Relative));
stackOne.Background = iBrush;
stackOne.Height = 23 * FrameMsg.ElectricCount / 2;
TextBlock tbElectric = new TextBlock();
tbElectric.Text = "电源";
tbElectric.Foreground = new SolidColorBrush(Colors.Black);
tbElectric.TextAlignment = TextAlignment.Center;
tbElectric.Height = 23;
tbElectric.Margin = new Thickness(0, 23 * FrameMsg.ElectricCount / (2 * 2) - tbElectric.Height / 2, 0, 0);
stackOne.Children.Add(tbElectric);
}
if (i > FrameMsg.TotalUCount - FrameMsg.ElectricCount / 2 && i < FrameMsg.TotalUCount)
{
dropDrapPanel.Visibility = Visibility.Collapsed;
dropDrapPanel.AllowDrop = false;
}
if (i == FrameMsg.ElectricCount / 2)//“最后FrameMsg.ElectricCount / 2行的时候的设置”
{
dropDrapPanel.SetValue(Grid.RowSpanProperty, FrameMsg.ElectricCount / 2);
dropDrapPanel.IsEnabled = false;
ImageBrush iBrush = new ImageBrush();
iBrush.ImageSource = new BitmapImage(new Uri("Img/Electric.png", UriKind.Relative));
stackOne.Background = iBrush;
stackOne.Height = 23 * FrameMsg.ElectricCount / 2;
TextBlock tbElectric = new TextBlock();
tbElectric.Text = "电源";
tbElectric.Foreground = new SolidColorBrush(Colors.Black);
tbElectric.TextAlignment = TextAlignment.Center;
tbElectric.Height = 20;
tbElectric.Margin = new Thickness(0, 23 * FrameMsg.ElectricCount / (2 * 2) - tbElectric.Height / 2, 0, 0);
stackOne.Children.Add(tbElectric);
}
if (i >= 1 && i < FrameMsg.ElectricCount / 2)
{
dropDrapPanel.Visibility = Visibility.Collapsed;
dropDrapPanel.AllowDrop = false;
}
}
#endregion
#region <<加载KVM>>
if (FrameMsg.KvmEndUNo != 0 && FrameMsg.KvmBeginUNo != 0)//存在KVM
{
int kvmNodeSize = FrameMsg.KvmEndUNo - FrameMsg.KvmBeginUNo + 1;
if (i == FrameMsg.KvmEndUNo)
{
dropDrapPanel.SetValue(Grid.RowSpanProperty, kvmNodeSize);
dropDrapPanel.IsEnabled = false;
//ImageBrush iBrush = new ImageBrush();
//iBrush.ImageSource = new BitmapImage(new Uri("Img/Electric.png", UriKind.Relative));
//stackOne.Background = iBrush;
stackOne.Background = new SolidColorBrush(Colors.DarkGray);
stackOne.Height = 23 * kvmNodeSize;
TextBlock tbKVM = new TextBlock();
tbKVM.Text = "KVM";
tbKVM.Foreground = new SolidColorBrush(Colors.Black);
tbKVM.TextAlignment = TextAlignment.Center;
tbKVM.Height = 23;
tbKVM.Margin = new Thickness(0, 23 * kvmNodeSize / 2 - tbKVM.Height / 2, 0, 0);
stackOne.Children.Add(tbKVM);
}
if (i < FrameMsg.KvmEndUNo && i >= FrameMsg.KvmBeginUNo)
{
dropDrapPanel.Visibility = Visibility.Collapsed;
dropDrapPanel.AllowDrop = false;
}
}
#endregion
#endregion
LayoutRoot.Children.Add(dropDrapPanel);
}
}
ReturnUI = LayoutRoot;
}
#endregion
#endregion
//2011-12-14修改
private bool isSuccess;
private ComputerUnit CU;
private PanelDragDropTarget DropPanel;
public UIElement ReturnUI { get; set; }
public NodeFrameView ReturnComputerMsg { get; set; }
private RowFrameView FrameMsg;
private ListBoxItem SelectItem;
private int SelectIndex;
}
}