UserControlFather.xaml.cs 15.1 KB
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
{
    /// <summary>
    /// UserControlFather.xaml 的交互逻辑
    /// </summary>
    public partial class UserControlFather : UserControl
    {
        public UserControlFather()
        {
            InitializeComponent();
        }

        //public StackPanel StackPanel
        //{
        //    get { return stackPanelFather; }
        //    set
        //    {
        //        stackPanelFather = value;
        //    }
        //}
        SquareBoxUtils squareBoxUtils = SquareBoxUtils.getInstance();
        /// <summary>
        /// 动态的加载界面
        /// </summary>
        /// <param name="userControlFathers"></param>
        public void loadUserControlFathers(List<ControlUserOne> 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都需要重新加载界面
        }

        /// <summary>
        /// 委托向界面新添加瑕疵
        /// </summary>
        /// <param name="defectShowDatas"></param>
        public void reload(List<DefectShowData> 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<DefectShowData> defectShowDatas = squareBoxUtils.getDefectShowDatas();
            //它已经添加一次了,再添加的话只能从集合里删除了
            //List<ControlUserOne> userControOnes = new List<ControlUserOne>();
            //先清空父模板
            squareBoxUtils.clearControlUserOnes();
            //重新获取父模板并添加最新的数据
            List<ControlUserOne> 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;
        }
        /// <summary>
        /// 初始化加载页面
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        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<DefectShowData> defectShowDatas = squareBoxUtils.getDefectShowDatas();
            //List<ControlUserOne> userControOnes = new List<ControlUserOne>();
            List<ControlUserOne> 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;
        }
    }
}