private void UpdatePrintControlData(PrintItemModel p, ContentControlBase c) { List <PropertyModel> Propertys = new List <PropertyModel>(); if (p.Parameters != null) { foreach (KeyValuePair <string, string> item in p.Parameters) { PropertyModel temp = c.Propertys.FirstOrDefault(x => { return(x.Name == item.Key); }); if (temp != null) { temp.Value = item.Value; } if (temp.Name == "pX") { Canvas.SetLeft(c, (double)Convert.ChangeType(temp.Value, typeof(double))); } else if (temp.Name == "pY") { Canvas.SetTop(c, (double)Convert.ChangeType(temp.Value, typeof(double))); } } } c.FunctionData = p.FunctionData; c.ConttrolData = p.ConttrolData; c.PrintKeyValue = p.PrintKeyValue; c.DataSourceType = p.DataSourceType; c.Index = p.Index; c.IsValid = p.IsValid; c.Width = p.Width; c.Height = p.Height; AddPrinControlEventHandle(c); }
/// <summary> /// 拖动添加打印控件 /// </summary> public void AddPrinControlByDrag() { if (IsMouseEnter && PrintControlFromTool != null) { ContentControlBase control = CommonRule.LoadClassInstance <ContentControlBase>(this.GetType().Namespace, PrintControlFromTool.GetType().Name); Canvas.SetTop(control, PrintControlFromToolOfPosition.Y); Canvas.SetLeft(control, PrintControlFromToolOfPosition.X); AddPrinControlEventHandle(control); canvasSpace.Children.Add(control); //更新放置坐标到控件相应属性 PropertyModel pX = GetPropertyItemByName(control.Propertys, "pX"); if (pX != null) { pX.Value = Math.Floor(PrintControlFromToolOfPosition.X); } PropertyModel pY = GetPropertyItemByName(control.Propertys, "pY"); if (pY != null) { pY.Value = Math.Floor(PrintControlFromToolOfPosition.Y); } CurrentControlBase = control; PrintControlFromTool = null; this.Cursor = null; } }
private void UserControl_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { if (PrintControlFromTool != null) { ContentControlBase control = CommonRule.LoadClassInstance <ContentControlBase>(this.GetType().Namespace, PrintControlFromTool.GetType().Name); Canvas.SetTop(control, PrintControlFromToolOfPosition.Y); Canvas.SetLeft(control, PrintControlFromToolOfPosition.X); AddPrinControlEventHandle(control); canvasSpace.Children.Add(control); //更新放置坐标到控件相应属性 PropertyModel pX = GetPropertyItemByName(control.Propertys, "pX"); if (pX != null) { pX.Value = Math.Floor(PrintControlFromToolOfPosition.X); } PropertyModel pY = GetPropertyItemByName(control.Propertys, "pY"); if (pY != null) { pY.Value = Math.Floor(PrintControlFromToolOfPosition.Y); } CurrentControlBase = control; PrintControlFromTool = null; this.Cursor = null; } }
/// <summary> /// 控件右键菜单 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void c_OnContentMenuEvent(object sender, ContentMenuEventArgs e) { MenuItem m = e.MenuItem; ContentControlBase Control = (ContentControlBase)e.Source; int flag = (int)m.Tag; if (flag == 1000) { if (OnPrintControlPropertyEvent != null) { OnPrintControlPropertyEvent(Control, e); } } else if (flag == 1001) { canvasSpace.Children.Remove(Control); OnPrintControlPropertyEvent(null, e); } else if (flag == 1002) { canvasSpace.Children.Clear(); OnPrintControlPropertyEvent(null, e); } }
/// <summary> /// 注册事件 /// </summary> /// <param name="c"></param> private void AddPrinControlEventHandle(ContentControlBase c) { c.OnContentMenuEvent += new EventHandler <ContentMenuEventArgs>(c_OnContentMenuEvent); c.OnMouseLeftButtonDownEvent += new MouseButtonEventHandler(c_OnMouseLeftButtonDownEvent); c.OnMouseLeftButtonUpEvent += new MouseButtonEventHandler(c_OnMouseLeftButtonUpEvent); c.OnMouseMoveEvent += new MouseEventHandler(c_OnMouseMoveEvent); }
/// <summary> /// 获取界面打印信息 /// </summary> /// <returns></returns> public PrintFactoryModel GetPrintFactoryInfo() { string picturResource = string.Empty; //打印模板 PrintFactoryModel p = new PrintFactoryModel(); //打印条目 PrintItemModel printItemModel = null; //参数集合 Dictionary <string, string> parameters = null; //打印条目集合 List <PrintItemModel> printItems = new List <PrintItemModel>(); //工作台Width p.Width = Math.Floor(PrintLable.Width); //工作台heighht p.Height = Math.Floor(PrintLable.Height); //获取打印条目 foreach (UIElement item in canvasSpace.Children) { if (item is ContentControlBase) { ContentControlBase c = item as ContentControlBase; printItemModel = new PrintItemModel() { PrintCaption = c.PrintCaption, PrintFunctionName = c.PrintFunctionName, PrintKeyValue = c.PrintKeyValue, DataSourceType = c.DataSourceType, Index = c.Index, IsValid = c.IsValid, ConttrolData = c.ConttrolData, FunctionData = c.FunctionData, Width = c.Width.IsNaN() ? c.ActualWidth : c.Width, Height = c.Height.IsNaN() ? c.ActualHeight : c.Height }; if (c.Propertys != null && c.Propertys.Count > 0) { parameters = new Dictionary <string, string>(); foreach (PropertyModel pro in c.Propertys) { parameters.Add(pro.Name, (string)Convert.ChangeType(pro.Value, typeof(string))); } } printItemModel.Parameters = parameters; printItems.Add(printItemModel); if (item is PictureControl) { string fileName = System.IO.Path.GetFileName(c.PrintKeyValue); if (!picturResource.Contains(fileName)) { picturResource += string.Format("{0};", System.IO.Path.GetFileName(c.PrintKeyValue)); } } } } p.PicturResource = picturResource; p.PrintItems = printItems; return(p); }
void c_OnMouseLeftButtonUpEvent(object sender, MouseButtonEventArgs e) { CurrentControlBase = sender as ContentControlBase; if (OnPrintControlPropertyEvent != null) { OnPrintControlPropertyEvent(sender, null); } }
/// <summary> /// 显示控件属性 /// </summary> /// <param name="c"></param> public void DisplayPrintCcontrolProperty(ContentControlBase c) { gdAttribute.Children.Clear(); gdAttribute.RowDefinitions.Clear(); gdAttribute.ColumnDefinitions.Clear(); CurrentPrintControl = c; if (c != null) { CreatePropertyWind(c); } }
/// <summary> /// 工作区获取了焦点才会接收键盘事件 /// 本案中打印子控件不具有接收焦点的能力,因此增加tbFocus /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void UserControl_KeyUp(object sender, KeyEventArgs e) { if (e.Key == Key.Delete) { if (CurrentControlBase != null) { canvasSpace.Children.Remove(CurrentControlBase); OnPrintControlPropertyEvent(null, null); CurrentControlBase = null; } } }
/// <summary> /// 特殊控件处理 /// </summary> private void DealWithSpecialPrintControl(ContentControlBase c) { Type t = c.GetType(); if (t == typeof(RectangleControl)) { DealWithRectangleControl(c); } else { //TODO } }
/// <summary> /// 矩形控件处理 /// </summary> /// <param name="c"></param> private void DealWithRectangleControl(ContentControlBase c) { double y = Math.Floor(Canvas.GetTop(c)); double x = Math.Floor(Canvas.GetLeft(c)); PropertyModel pEX = GetPropertyItemByName(c.Propertys, "pEX"); if (pEX != null) { pEX.Value = Math.Floor(x + c.Width); } PropertyModel pEY = GetPropertyItemByName(c.Propertys, "pEY"); if (pEY != null) { pEY.Value = Math.Floor(y + c.Height); } }
/// <summary> /// 移动事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void MoveThumb_DragDelta(object sender, DragDeltaEventArgs e) { Control designerItem = this.DataContext as Control; if (designerItem.RenderTransform != null && designerItem.RenderTransform is RotateTransform) { RotateTransform r = (RotateTransform)designerItem.RenderTransform; if (r != null) { if (r.Angle != 0) { return; } } } if (designerItem != null) { double left = Math.Floor(Canvas.GetLeft(designerItem) + e.HorizontalChange); double top = Math.Floor(Canvas.GetTop(designerItem) + e.VerticalChange); Canvas.SetLeft(designerItem, left); Canvas.SetTop(designerItem, top); if (designerItem is ContentControlBase) { ContentControlBase temp = designerItem as ContentControlBase; PropertyModel pX = GetPropertyItemByName(temp.Propertys, "pX"); if (pX != null) { pX.Value = left; } PropertyModel pY = GetPropertyItemByName(temp.Propertys, "pY"); if (pY != null) { pY.Value = top; } if (designerItem is ContentControlBase) { DealWithSpecialPrintControl((ContentControlBase)designerItem); } } } }
private void DealWithSpecialPrintControl(ContentControlBase c, PropertyModel p, TextBox textBox = null) { if (p.Name == "pX") { Canvas.SetLeft(c, (double)Convert.ChangeType(p.Value, typeof(double))); return; } if (p.Name == "pY") { Canvas.SetTop(c, (double)Convert.ChangeType(p.Value, typeof(double))); return; } if (p.PropertyChanged != null) { PropertyChangedFromTextBoxEventArgs proerty = new PropertyChangedFromTextBoxEventArgs() { PrintControl = c, TextBox = textBox, Property = p }; p.PropertyChanged(proerty); } }
/// <summary> /// 缩放事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ResizeThumb_DragDelta(object sender, DragDeltaEventArgs e) { Control designerItem = this.DataContext as Control; if (designerItem.RenderTransform != null && designerItem.RenderTransform is RotateTransform) { //有旋转时禁用移动和缩放 RotateTransform r = (RotateTransform)designerItem.RenderTransform; if (r != null) { if (r.Angle != 0) { return; } } } if (designerItem != null) { double deltaVertical, deltaHorizontal; switch (VerticalAlignment) { case VerticalAlignment.Bottom: deltaVertical = Math.Min(-e.VerticalChange, designerItem.ActualHeight - designerItem.MinHeight); designerItem.Height -= deltaVertical; if (designerItem.Height > designerItem.MaxHeight) { designerItem.Height = designerItem.MaxHeight; } break; case VerticalAlignment.Top: deltaVertical = Math.Min(e.VerticalChange, designerItem.ActualHeight - designerItem.MinHeight); Canvas.SetTop(designerItem, Canvas.GetTop(designerItem) + deltaVertical); designerItem.Height -= deltaVertical; if (designerItem.Height > designerItem.MaxHeight) { designerItem.Height = designerItem.MaxHeight; } break; default: break; } switch (HorizontalAlignment) { case HorizontalAlignment.Left: deltaHorizontal = Math.Min(e.HorizontalChange, designerItem.ActualWidth - designerItem.MinWidth); Canvas.SetLeft(designerItem, Canvas.GetLeft(designerItem) + deltaHorizontal); designerItem.Width -= deltaHorizontal; if (designerItem.Width > designerItem.MaxWidth) { designerItem.Width = designerItem.MaxWidth; } break; case HorizontalAlignment.Right: deltaHorizontal = Math.Min(-e.HorizontalChange, designerItem.ActualWidth - designerItem.MinWidth); designerItem.Width -= deltaHorizontal; if (designerItem.Width > designerItem.MaxWidth) { designerItem.Width = designerItem.MaxWidth; } break; default: break; } if (designerItem is ContentControlBase) { ContentControlBase temp = designerItem as ContentControlBase; PropertyModel pX = GetPropertyItemByName(temp.Propertys, "pHeight"); if (pX != null) { pX.Value = Math.Floor(designerItem.Height); } PropertyModel pY = GetPropertyItemByName(temp.Propertys, "pWidth"); if (pY != null) { pY.Value = Math.Floor(designerItem.Width); } double y = Math.Floor(Canvas.GetTop(temp)); double x = Math.Floor(Canvas.GetLeft(temp)); PropertyModel px = GetPropertyItemByName(temp.Propertys, "pX"); if (px != null) { px.Value = x; } PropertyModel py = GetPropertyItemByName(temp.Propertys, "pY"); if (py != null) { py.Value = y; } } if (designerItem is ContentControlBase) { DealWithSpecialPrintControl((ContentControlBase)designerItem); } } e.Handled = true; }
/// <summary> /// 打印工具栏 控件左键Down /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void printTool_OnMouseLeftButtonDownEvent(object sender, MouseButtonEventArgs e) { ContentControlBase p = sender as ContentControlBase; printCanvas.UpdatePrintControlFromTool(p); }
private void CreatePropertyWind(ContentControlBase c) { gdAttribute.ColumnDefinitions.Add(new ColumnDefinition() { Width = GridLength.Auto }); gdAttribute.ColumnDefinitions.Add(new ColumnDefinition() { }); int index = 0; TextBox tbTextBox = null; CheckBox cbCheckBox = null; TextBlock tbTextBlock = null; ComboBox cbComboBox = null; DirOrFileSelect drOrFileSelect = null; gdAttribute.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto }); PrintItemPropety p = new PrintItemPropety() { Margin = new Thickness(5, 5, 5, 5) }; p.CurrentPrintControl = c; gdAttribute.Children.Add(p); Grid.SetRow(p, index); Grid.SetColumn(p, 0); Grid.SetColumnSpan(p, 2); index++; gdAttribute.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto }); Rectangle line = new Rectangle() { Margin = new Thickness(5, 5, 5, 5), Fill = new SolidColorBrush(Colors.RosyBrown), Height = 2 }; gdAttribute.Children.Add(line); Grid.SetRow(line, index); Grid.SetColumn(line, 0); Grid.SetColumnSpan(line, 2); index++; foreach (PropertyModel item in c.Propertys) { if (!item.IsDisplayInPropertyControl) { continue; } gdAttribute.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto }); tbTextBlock = new TextBlock() { VerticalAlignment = VerticalAlignment.Center, Text = item.Caption, Margin = new Thickness(5), FontWeight = FontWeights.Bold }; switch (item.PropertyType) { case PropertyType.String: { tbTextBox = new TextBox() { DataContext = c, VerticalAlignment = VerticalAlignment.Center, Text = item.Value != null?item.Value.ToString() : string.Empty, Tag = item, Margin = new Thickness(5) }; InputMethod.SetIsInputMethodEnabled(tbTextBox, item.SupportChinese); tbTextBox.LostFocus += new RoutedEventHandler(tbTextBox_LostFocus); tbTextBox.KeyDown += new KeyEventHandler(tbTextBox_KeyDown); gdAttribute.Children.Add(tbTextBox); Grid.SetRow(tbTextBox, index); Grid.SetColumn(tbTextBox, 1); break; } case PropertyType.Int: { tbTextBox = new TextBox() { DataContext = c, VerticalAlignment = VerticalAlignment.Center, Text = item.Value != null?item.Value.ToString() : string.Empty, Tag = item, Margin = new Thickness(5) }; InputMethod.SetIsInputMethodEnabled(tbTextBox, item.SupportChinese); tbTextBox.LostFocus += new RoutedEventHandler(tbTextBox_LostFocus); tbTextBox.KeyDown += new KeyEventHandler(tbTextBox_KeyDown); gdAttribute.Children.Add(tbTextBox); Grid.SetRow(tbTextBox, index); Grid.SetColumn(tbTextBox, 1); break; } case PropertyType.Double: { tbTextBox = new TextBox() { DataContext = c, VerticalAlignment = VerticalAlignment.Center, Text = item.Value != null?item.Value.ToString() : string.Empty, Tag = item, Margin = new Thickness(5) }; InputMethod.SetIsInputMethodEnabled(tbTextBox, item.SupportChinese); tbTextBox.LostFocus += new RoutedEventHandler(tbTextBox_LostFocus); tbTextBox.KeyDown += new KeyEventHandler(tbTextBox_KeyDown); gdAttribute.Children.Add(tbTextBox); Grid.SetRow(tbTextBox, index); Grid.SetColumn(tbTextBox, 1); break; } case PropertyType.CheckBox: { cbCheckBox = new CheckBox() { DataContext = c, VerticalAlignment = VerticalAlignment.Center, VerticalContentAlignment = VerticalAlignment.Center, IsChecked = item.Value != null ? ((int)Convert.ChangeType(item.Value, typeof(int)) == 0 ? false : true) : false, Tag = item, Margin = new Thickness(5) }; cbCheckBox.Checked += new RoutedEventHandler(ckCheckBox_Checked); cbCheckBox.Unchecked += new RoutedEventHandler(ckCheckBox_Unchecked); gdAttribute.Children.Add(cbCheckBox); Grid.SetRow(cbCheckBox, index); Grid.SetColumn(cbCheckBox, 1); break; } case PropertyType.Combobox: { cbComboBox = new ComboBox() { DataContext = c, VerticalAlignment = VerticalAlignment.Center, DisplayMemberPath = "Caption", Tag = item, Margin = new Thickness(5) }; cbComboBox.ItemsSource = item.ComboBoxData; if (item.ComboBoxData != null && item.Value != null) { foreach (KeyCaption k in item.ComboBoxData) { if (item.ComboBoxValueType == 0) { if (k.Caption == (string)Convert.ChangeType(item.Value, typeof(string))) { cbComboBox.SelectedItem = k; break; } } else if (item.ComboBoxValueType == 1) { try { if (k.ID == (int)Convert.ChangeType(item.Value, typeof(int))) { cbComboBox.SelectedItem = k; break; } } catch { break; } } } } cbComboBox.SelectionChanged += new SelectionChangedEventHandler(cbComboBox_SelectionChanged); gdAttribute.Children.Add(cbComboBox); Grid.SetRow(cbComboBox, index); Grid.SetColumn(cbComboBox, 1); break; } case PropertyType.Picture: { drOrFileSelect = new DirOrFileSelect() { Tag = item, DialogValue = item.Value != null?item.Value.ToString() : string.Empty, VerticalAlignment = VerticalAlignment.Center, DialogType = 1, Filter = "PCX(*.pcx)|*.pcx|BMP(*.bmp)|*.bmp|JPG(*.jpg)|*.jpg|PNG(*.png)|*.png" }; drOrFileSelect.OnSelectedChanged += new EventHandler <PictureSelectedEventArgs>(drOrFileSelect_OnSelectedChanged); gdAttribute.Children.Add(drOrFileSelect); Grid.SetRow(drOrFileSelect, index); Grid.SetColumn(drOrFileSelect, 1); break; } } gdAttribute.Children.Add(tbTextBlock); Grid.SetRow(tbTextBlock, index); Grid.SetColumn(tbTextBlock, 0); index++; } }
/// <summary> /// 工具栏选择了打印控件 /// </summary> /// <param name="printControlFromTool"></param> public void UpdatePrintControlFromTool(ContentControlBase printControlFromTool) { PrintControlFromTool = printControlFromTool; }
private void UserControl_MouseLeave(object sender, MouseEventArgs e) { IsMouseEnter = false; PrintControlFromTool = null; this.Cursor = null; }
/// <summary> /// 属性更改 /// </summary> /// <param name="printControlFromTool"></param> public void UpdatePrintControlFromProperty(ContentControlBase printControlFromTool) { //TODO }