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;
}
}
}