using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; 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 OS.Spin.View.Utils; using OS.Spin.ViewModle.Models; using OS.Spin.View.SquareBox; namespace OS.Spin.View.SquareBox { /// /// UserControlFather.xaml 的交互逻辑 /// public partial class UserControlFather : UserControl { public UserControlFather() { InitializeComponent(); } //public StackPanel StackPanel //{ // get { return stackPanelFather; } // set // { // stackPanelFather = value; // } //} SquareBoxUtils squareBoxUtils = SquareBoxUtils.getInstance(); /// /// 动态的加载界面 /// /// public void loadUserControlFathers(List userControlFathers) { //int j = 0; //控制行标 //int a = 0; //控制列标 //double starLeft = 4; //起始左间距 //double startTop = 5; //起始上间距 //double spanLeft = 220; //标签间隔左间距 //double spanTop = 320; //标签间隔上间距 //double left = 0; //标签的实际左间距 //double Top = 0; //标签的实际上间距 ////用户动态计算标签的位置和坐标 //int number = 0; //每行能容纳标签的个数 //double actualTop = father.ActualHeight; //改变后获取父容器的实际高度 //double actualLeft = father.ActualWidth; //改变后获取 父容器的实际宽度 if (null != userControlFathers && userControlFathers.Count > 0) { stackPanelFather.Children.Clear(); //清空面板 for (var i = 0; i < userControlFathers.Count; i++) { int ground = userControlFathers[i].ground; OS.Spin.View.SquareBox.UserControOne userControOne = userControlFathers[i].userControOne; StackPanel stackPanel = userControOne.StackPanel; //获取子模板父类对象 //number = (int)(actualLeft / 220); OS.Spin.View.SquareBox.UserControl4 userControl4 = (OS.Spin.View.SquareBox.UserControl4)stackPanel.Children[0]; //这才是点击事件的标签 Canvas canvas = userControl4.Canvas; if (ground == 1) { canvas.Background = new ImageBrush { ImageSource = new BitmapImage(new Uri("pack://application:,,,/images/selected.png")) }; } if (ground == 0) { canvas.Background = new ImageBrush { ImageSource = new BitmapImage(new Uri("pack://application:,,,/images/unselected.png")) }; } //这样这个接口并不通用啊,要变成通用的,必须重新计算其值 //计算该模板的位置 //j = i / number; //控制排数 //a = i % number; //控制换行 //left = starLeft + a * spanLeft; //Top = startTop + j * spanTop; ////添加到父模板中 //Canvas.SetLeft(userControOne, left); //Canvas.SetTop(userControOne, Top); stackPanelFather.Children.Add(userControOne); //father.Children.Add(userControOne); } } //不管是点击这个界面还是点击右上角的红色X都需要重新加载界面 } /// /// 委托向界面新添加瑕疵 /// /// public void reload(List defectShowDatas) { //int j = 0; //int a = 0; //double starLeft = 4; //double startTop = 5; //double spanLeft = 220; //double spanTop = 320; //double left = 0; //double Top = 0; ////用户动态计算标签的位置和坐标 //int number = 0; //每行能容纳标签的个数 //double actualTop = father.ActualHeight; //改变后获取父容器的实际高度 //double actualLeft = father.ActualWidth; //改变后获取 父容器的实际宽度 //获取数据 //List defectShowDatas = squareBoxUtils.getDefectShowDatas(); //它已经添加一次了,再添加的话只能从集合里删除了 //List userControOnes = new List(); //先清空父模板 squareBoxUtils.clearControlUserOnes(); //重新获取父模板并添加最新的数据 List userControOnes = squareBoxUtils.getControlUserOnes(); stackPanelFather.Children.Clear(); //清空面板重新加载(如果为空就直接清空集合啊) //遍历赋值 if (null != defectShowDatas && defectShowDatas.Count > 0) //非空判断 { //father.Children.Clear(); //清空面板重新加载 for (var i = 0; i < defectShowDatas.Count; i++) //一个数据就代表一个模板 { //准备数据 DefectShowData defectShowData = defectShowDatas[i]; string hole = defectShowData.hole; //破洞 string size = defectShowData.size; //尺寸 string attribute = defectShowData.attribute; //属性 //准备模板 UserControOne userControlOne = new UserControOne(); StackPanel stackPanel = userControlOne.StackPanel; //获取子模板父类对象 OS.Spin.View.SquareBox.UserControl4 userControl4 = (OS.Spin.View.SquareBox.UserControl4)stackPanel.Children[0]; //这才是点击事件的标签 //设置显示图片 Image logo = userControl4.logo; //获取图片路径 //String imagePath = defectShowData.imagePath; ////绑定图片源 //BitmapImage image = new BitmapImage(new Uri(imagePath, UriKind.Absolute));//打开图片 logo.Source = defectShowData.imagePath;//将控件和图片绑定,logo为Image控件名称 UserControl1 userControl1 = (UserControl1)stackPanel.Children[2]; //获取父模板第三个子元素 StackPanel stack = userControl1.StackPanel; //获取UserControl1父元素对象 StackPanel stack1 = (StackPanel)stack.Children[0]; //获取父元素的第一个子元素 TextBlock textBlock1 = (TextBlock)stack1.Children[0]; //破洞 textBlock1.Text = "编号:"; TextBlock textBlock2 = (TextBlock)stack1.Children[1]; //值 textBlock2.Text = hole; StackPanel stack2 = (StackPanel)stack.Children[1]; //获取父元素的第二个子元素 TextBlock textBlock3 = (TextBlock)stack2.Children[0]; //尺寸 textBlock3.Text = "纬度:"; TextBlock textBlock4 = (TextBlock)stack2.Children[1]; //值 textBlock4.Text = size; StackPanel stack3 = (StackPanel)stack.Children[2]; //获取父元素的第三个子元素 TextBlock textBlock5 = (TextBlock)stack3.Children[0]; //属性 textBlock5.Text = "瑕疵:"; TextBlock textBlock6 = (TextBlock)stack3.Children[1]; //值 textBlock6.Text = attribute; //number = (int)(actualLeft / 220); ////计算该模板的位置 //j = i / number; //控制排数 //a = i % number; //控制换行 //left = starLeft + a * spanLeft; //Top = startTop + j * spanTop; ////添加到父模板中 //Canvas.SetLeft(userControlOne, left); //Canvas.SetTop(userControlOne, Top); stackPanelFather.Children.Add(userControlOne); //这里再封装一层 ControlUserOne controlUserOne = new ControlUserOne(userControlOne, userControl4, 0); //默认初始化重置为0 userControOnes.Add(controlUserOne); //保存数据用于动态的更新 } } squareBoxUtils.setUserControlFathers(userControOnes); //保存到内存中 //委托注册函数 //SquareBoxDelegateUtil squareBoxDelegateUtil = squareBoxUtils.getSquareBoxDelegateUtil(); //squareBoxDelegateUtil.squareBoxDelegate += loadUserControlFathers; } /// /// 初始化加载页面 /// /// /// private void UserControl_Loaded(object sender, RoutedEventArgs e) { //int j = 0; //int a = 0; //double starLeft = 4; //double startTop = 5; //double spanLeft = 220; //double spanTop = 320; //double left = 0; //double Top = 0; ////用户动态计算标签的位置和坐标 //int number = 0; //每行能容纳标签的个数 //double actualTop = father.ActualHeight; //改变后获取父容器的实际高度 //double actualLeft = father.ActualWidth; //改变后获取 父容器的实际宽度 //获取数据 List defectShowDatas = squareBoxUtils.getDefectShowDatas(); //List userControOnes = new List(); List userControOnes = squareBoxUtils.getControlUserOnes(); //遍历赋值 if (null != defectShowDatas && defectShowDatas.Count > 0) //非空判断 { for (var i = 0; i < defectShowDatas.Count; i++) //一个数据就代表一个模板 { //准备数据 DefectShowData defectShowData = defectShowDatas[i]; string hole = defectShowData.hole; //破洞 string size = defectShowData.size; //尺寸 string attribute = defectShowData.attribute; //属性 //准备模板 UserControOne userControlOne = new UserControOne(); StackPanel stackPanel = userControlOne.StackPanel; //获取子模板父类对象 OS.Spin.View.SquareBox.UserControl4 userControl4 = (OS.Spin.View.SquareBox.UserControl4)stackPanel.Children[0]; //这才是点击事件的标签 //设置显示图片 Image logo = userControl4.logo; //获取图片路径 //String imagePath = defectShowData.imagePath; ////绑定图片源 //BitmapImage image = new BitmapImage(new Uri(imagePath, UriKind.Absolute));//打开图片 logo.Source = defectShowData.imagePath;//将控件和图片绑定,logo为Image控件名称 UserControl1 userControl1 = (UserControl1)stackPanel.Children[2]; //获取父模板第三个子元素 StackPanel stack = userControl1.StackPanel; //获取UserControl1父元素对象 StackPanel stack1 = (StackPanel)stack.Children[0]; //获取父元素的第一个子元素 TextBlock textBlock1 = (TextBlock)stack1.Children[0]; //破洞 textBlock1.Text = "编号:"; TextBlock textBlock2 = (TextBlock)stack1.Children[1]; //值 textBlock2.Text = hole; StackPanel stack2 = (StackPanel)stack.Children[1]; //获取父元素的第二个子元素 TextBlock textBlock3 = (TextBlock)stack2.Children[0]; //尺寸 textBlock3.Text = "纬度:"; TextBlock textBlock4 = (TextBlock)stack2.Children[1]; //值 textBlock4.Text = size; StackPanel stack3 = (StackPanel)stack.Children[2]; //获取父元素的第三个子元素 TextBlock textBlock5 = (TextBlock)stack3.Children[0]; //属性 textBlock5.Text = "瑕疵:"; TextBlock textBlock6 = (TextBlock)stack3.Children[1]; //值 textBlock6.Text = attribute; //number = (int)(actualLeft / 220); ////计算该模板的位置 //j = i / number; //控制排数 //a = i % number; //控制换行 //left = starLeft + a * spanLeft; //Top = startTop + j * spanTop; ////添加到父模板中 //Canvas.SetLeft(userControlOne, left); //Canvas.SetTop(userControlOne, Top); stackPanelFather.Children.Add(userControlOne); //这里再封装一层 ControlUserOne controlUserOne = new ControlUserOne(userControlOne, userControl4, 0); //默认初始化重置为0 userControOnes.Add(controlUserOne); //保存数据用于动态的更新 } } squareBoxUtils.setUserControlFathers(userControOnes); //保存到内存中 //委托注册函数 SquareBoxDelegateUtil squareBoxDelegateUtil = squareBoxUtils.getSquareBoxDelegateUtil(); SquareBoxDefectDelegateUtil squareBoxDefectDelegateUtil = squareBoxUtils.getSquareBoxDefectDelegateUtil(); squareBoxDefectDelegateUtil.squareBoxDefectDelegate += loadUserControlFathers; //用于控件瑕疵点改变联动的委托刷新 squareBoxDelegateUtil.squareBoxDelegate += reload; //用于控制瑕疵点添加的委托刷新 } private void Father_SizeChanged(object sender, SizeChangedEventArgs e) { //非空校验 if (null == sender || squareBoxUtils.getUserControlFathers().Count == 0) { return; } //重新加载 loadUserControlFathers(squareBoxUtils.getUserControlFathers()); } private void ScrollViewer_ManipulationBoundaryFeedback(object sender, ManipulationBoundaryFeedbackEventArgs e) { e.Handled = true; } } }