Silverlight日记:动态操作Grid
一,动态生成Grid
1 public static Grid CreateGrid(List<T_METER> List) 2 { 3 var g = new Grid(); 4 if (null == List) return g; 5 g.HorizontalAlignment = HorizontalAlignment.Stretch; 6 g.VerticalAlignment = VerticalAlignment.Bottom; 7 var meters = List.OrderBy(i => (string.IsNullOrEmpty(i.F_ORDER_NO) ? 0 : Convert.ToInt32(i.F_ORDER_NO))); 8 var count = meters.Count(); 9 var sdr = List.FirstOrDefault(i => i.F_EQT_TYPE.ToUpper().Equals("C")); 10 var exteneral = List.FirstOrDefault(i => i.F_EQT_TYPE.ToUpper().Equals("E")); 11 #region 生成列 12 for (int i = 0; i < 11; i++) 13 { 14 var rd = new RowDefinition(); 15 if (i == 0) 16 rd.Height = new GridLength(440); 17 else 18 rd.Height = new GridLength(30); 19 g.RowDefinitions.Add(rd); 20 } 21 for (int i = 0; i < count; i++) 22 { 23 var cd = new ColumnDefinition(); 24 if (i == 0) 25 cd.Width = new GridLength(120); 26 else if (i == 1) 27 { 28 if (sdr != null) 29 cd.Width = new GridLength(150); 30 else 31 cd.Width = new GridLength(90); 32 } 33 else if (i == 2) 34 { 35 if (exteneral != null) 36 cd.Width = new GridLength(98); 37 else 38 cd.Width = new GridLength(71); 39 } 40 else 41 cd.Width = new GridLength(71); 42 g.ColumnDefinitions.Add(cd); 43 } 44 #endregion 45 46 #region 数据绑定 47 for (int i = 0; i < count; i++) 48 { 49 50 var meter = meters.ElementAt(i); 51 var namepath = string.Format("Objs[{0}].MeterName", i); 52 var statepath = string.Format("Objs[{0}].SwitchState.Value", i); 53 if (meter.F_EQT_TYPE.Equals("D")) 54 { 55 var tranLeft = new TranLeft(); 56 tranLeft.SetBinding(TranLeft.MeterNameProperty, new Binding(namepath)); 57 tranLeft.SetBinding(TranLeft.SwitchStateProperty, new Binding(statepath)); 58 tranLeft.SetValue(Grid.RowProperty, 0); 59 tranLeft.SetValue(Grid.ColumnProperty, i); 60 tranLeft.Width = 120; 61 g.Children.Add(tranLeft); 62 } 63 else if (meter.F_EQT_TYPE.Equals("B")) 64 { 65 var tran1 = new Tran1(); 66 tran1.SetBinding(Tran1.MeterNameProperty, new Binding(namepath)); 67 tran1.SetBinding(Tran1.SwitchStateProperty, new Binding(statepath)); 68 tran1.SetValue(Grid.RowProperty, 0); 69 tran1.SetValue(Grid.ColumnProperty, i); 70 tran1.Width = 90; 71 g.Children.Add(tran1); 72 } 73 else if (meter.F_EQT_TYPE.Equals("C")) 74 { 75 var tran2 = new Tran2(); 76 tran2.SetBinding(Tran2.MeterNameProperty, new Binding(namepath)); 77 tran2.SetBinding(Tran2.SwitchStateProperty, new Binding(statepath)); 78 tran2.SetValue(Grid.RowProperty, 0); 79 tran2.SetValue(Grid.ColumnProperty, i); 80 tran2.Width = 150; 81 g.Children.Add(tran2); 82 } 83 else if (meter.F_EQT_TYPE.Equals("E")) 84 { 85 var external = new External(); 86 external.SetBinding(External.MeterNameProperty, new Binding(namepath)); 87 external.SetBinding(External.SwitchStateProperty, new Binding(statepath)); 88 external.SetValue(Grid.RowProperty, 0); 89 external.SetValue(Grid.ColumnProperty, i); 90 external.Width = 98; 91 g.Children.Add(external); 92 } 93 else 94 { 95 var m = new Meter(); 96 m.SetBinding(Meter.MeterNameProperty, new Binding(namepath)); 97 m.SetBinding(Meter.SwitchStateProperty, new Binding(statepath)); 98 m.SetValue(Grid.RowProperty, 0); 99 m.SetValue(Grid.ColumnProperty, i); 100 g.Children.Add(m); 101 } 102 103 var uaCell = new CustomCell(); 104 uaCell.SetBinding(CustomCell.ValueProperty, new Binding(string.Format("Objs[{0}].FUA.Value", i))); 105 uaCell.SetBinding(CustomCell.IsAlarmProperty, new Binding(string.Format("Objs[{0}].FUA.IsAlarm", i))); 106 uaCell.SetBinding(CustomCell.IsButtonProperty, new Binding(string.Format("Objs[{0}].FUA.IsButton", i))); 107 uaCell.SetValue(Grid.RowProperty, 1); 108 uaCell.SetValue(Grid.ColumnProperty, i); 109 g.Children.Add(uaCell); 110 111 var ubCell = new CustomCell(); 112 ubCell.SetBinding(CustomCell.ValueProperty, new Binding(string.Format("Objs[{0}].FUB.Value", i))); 113 ubCell.SetBinding(CustomCell.IsAlarmProperty, new Binding(string.Format("Objs[{0}].FUB.IsAlarm", i))); 114 ubCell.SetBinding(CustomCell.IsButtonProperty, new Binding(string.Format("Objs[{0}].FUB.IsButton", i))); 115 ubCell.SetValue(Grid.RowProperty, 2); 116 ubCell.SetValue(Grid.ColumnProperty, i); 117 g.Children.Add(ubCell); 118 119 var ucCell = new CustomCell(); 120 ucCell.SetBinding(CustomCell.ValueProperty, new Binding(string.Format("Objs[{0}].FUC.Value", i))); 121 ucCell.SetBinding(CustomCell.IsAlarmProperty, new Binding(string.Format("Objs[{0}].FUC.IsAlarm", i))); 122 ucCell.SetBinding(CustomCell.IsButtonProperty, new Binding(string.Format("Objs[{0}].FUC.IsButton", i))); 123 ucCell.SetValue(Grid.RowProperty, 3); 124 ucCell.SetValue(Grid.ColumnProperty, i); 125 g.Children.Add(ucCell); 126 127 128 var iaCell = new CustomCell(); 129 iaCell.SetBinding(CustomCell.ValueProperty, new Binding(string.Format("Objs[{0}].FIA.Value", i))); 130 iaCell.SetBinding(CustomCell.IsAlarmProperty, new Binding(string.Format("Objs[{0}].FIA.IsAlarm", i))); 131 iaCell.SetBinding(CustomCell.IsButtonProperty, new Binding(string.Format("Objs[{0}].FIA.IsButton", i))); 132 iaCell.SetValue(Grid.RowProperty, 4); 133 iaCell.SetValue(Grid.ColumnProperty, i); 134 g.Children.Add(iaCell); 135 136 var ibCell = new CustomCell(); 137 ibCell.SetBinding(CustomCell.ValueProperty, new Binding(string.Format("Objs[{0}].FIB.Value", i))); 138 ibCell.SetBinding(CustomCell.IsAlarmProperty, new Binding(string.Format("Objs[{0}].FIB.IsAlarm", i))); 139 ibCell.SetBinding(CustomCell.IsButtonProperty, new Binding(string.Format("Objs[{0}].FIB.IsButton", i))); 140 ibCell.SetValue(Grid.RowProperty, 5); 141 ibCell.SetValue(Grid.ColumnProperty, i); 142 g.Children.Add(ibCell); 143 144 var icCell = new CustomCell(); 145 icCell.SetBinding(CustomCell.ValueProperty, new Binding(string.Format("Objs[{0}].FIC.Value", i))); 146 icCell.SetBinding(CustomCell.IsAlarmProperty, new Binding(string.Format("Objs[{0}].FIC.IsAlarm", i))); 147 icCell.SetBinding(CustomCell.IsButtonProperty, new Binding(string.Format("Objs[{0}].FIC.IsButton", i))); 148 icCell.SetValue(Grid.RowProperty, 6); 149 icCell.SetValue(Grid.ColumnProperty, i); 150 g.Children.Add(icCell); 151 152 var alarmTypeCell = new CustomCell(); 153 alarmTypeCell.SetBinding(CustomCell.ValueProperty, new Binding(string.Format("Objs[{0}].AlarmType.Value", i))); 154 alarmTypeCell.SetBinding(CustomCell.IsAlarmProperty, new Binding(string.Format("Objs[{0}].AlarmType.IsAlarm", i))); 155 alarmTypeCell.SetBinding(CustomCell.IsButtonProperty, new Binding(string.Format("Objs[{0}].AlarmType.IsButton", i))); 156 alarmTypeCell.SetValue(Grid.RowProperty, 7); 157 alarmTypeCell.SetValue(Grid.ColumnProperty, i); 158 g.Children.Add(alarmTypeCell); 159 160 161 var meterAlarmCell = new CustomCell(); 162 meterAlarmCell.SetBinding(CustomCell.ValueProperty, new Binding(string.Format("Objs[{0}].MeterAlarm.Value", i))); 163 meterAlarmCell.SetBinding(CustomCell.IsAlarmProperty, new Binding(string.Format("Objs[{0}].MeterAlarm.IsAlarm", i))); 164 meterAlarmCell.SetBinding(CustomCell.IsButtonProperty, new Binding(string.Format("Objs[{0}].MeterAlarm.IsButton", i))); 165 meterAlarmCell.SetValue(Grid.RowProperty, 8); 166 meterAlarmCell.SetValue(Grid.ColumnProperty, i); 167 g.Children.Add(meterAlarmCell); 168 169 var powerCell = new CustomCell(); 170 powerCell.SetBinding(CustomCell.ValueProperty, new Binding(string.Format("Objs[{0}].Power.Value", i))); 171 powerCell.SetBinding(CustomCell.IsAlarmProperty, new Binding(string.Format("Objs[{0}].Power.IsAlarm", i))); 172 powerCell.SetBinding(CustomCell.IsButtonProperty, new Binding(string.Format("Objs[{0}].Power.IsButton", i))); 173 powerCell.SetValue(Grid.RowProperty, 9); 174 powerCell.SetValue(Grid.ColumnProperty, i); 175 g.Children.Add(powerCell); 176 177 var trendCell = new CustomCell(); 178 trendCell.SetBinding(CustomCell.ValueProperty, new Binding(string.Format("Objs[{0}].Trend.Value", i))); 179 trendCell.SetBinding(CustomCell.IsAlarmProperty, new Binding(string.Format("Objs[{0}].Trend.IsAlarm", i))); 180 trendCell.SetBinding(CustomCell.IsButtonProperty, new Binding(string.Format("Objs[{0}].Trend.IsButton", i))); 181 trendCell.SetBinding(CustomCell.BuildIdProperty, new Binding(string.Format("Objs[{0}].BuildId", i))); 182 trendCell.SetBinding(CustomCell.MeterIdProperty, new Binding(string.Format("Objs[{0}].MeterId", i))); 183 trendCell.SetValue(Grid.RowProperty, 10); 184 trendCell.SetValue(Grid.ColumnProperty, i); 185 g.Children.Add(trendCell); 186 } 187 #endregion 188 GridHelper.ShowBorder(g); 189 return g; 190 }
二,Grid边框操作
1 public class GridHelper 2 { 3 ////A0B3C6 4 public static SolidColorBrush _BorderBrush = new SolidColorBrush(ConvertFromString("#FFA0B3C6")); 5 public static double _BorderThickness = 1; 6 7 /// <summary> 8 /// 生成边框 9 /// </summary> 10 public static void ShowBorder(Grid gd) 11 { 12 if (gd == null) 13 { 14 return; 15 } 16 17 clearBorder(gd); 18 19 SolidColorBrush BorderColorBrush = _BorderBrush; 20 double BorderThickness = _BorderThickness; 21 22 CreateBorder(gd, BorderColorBrush, BorderThickness); 23 24 } 25 26 /// <summary> 27 /// 生成边框 28 /// </summary> 29 public static void ShowBorder(Grid gd, SolidColorBrush BorderColorBrush, double BorderThickness) 30 { 31 if (gd == null) 32 { 33 return; 34 } 35 36 clearBorder(gd); 37 38 CreateBorder(gd, BorderColorBrush, BorderThickness); 39 40 } 41 42 private static void clearBorder(Grid gd) 43 { 44 for (int i = gd.Children.Count - 1; i >= 0; i--) 45 { 46 if (gd.Children[i].ToString() == "System.Windows.Controls.Border") 47 { 48 Border re = gd.Children[i] as Border; 49 if (re.Tag == "autoBorder") 50 { 51 gd.Children.RemoveAt(i); 52 } 53 } 54 } 55 56 } 57 58 private static void CreateBorder(Grid gd, SolidColorBrush BorderBrush, double BorderThickness) 59 { 60 for (int i = 0; i < gd.RowDefinitions.Count; i++) 61 { 62 for (int j = 0; j < gd.ColumnDefinitions.Count; j++) 63 { 64 Border boIn = new Border(); 65 66 boIn.BorderBrush = BorderBrush; 67 if (i == 0) 68 { 69 boIn.BorderThickness = new Thickness(0, 0, 0, BorderThickness); 70 } 71 else 72 { 73 if (j == 0) 74 boIn.BorderThickness = new Thickness(BorderThickness, 0, BorderThickness, BorderThickness); 75 else 76 boIn.BorderThickness = new Thickness(0, 0, BorderThickness, BorderThickness); 77 } 78 boIn.SetValue(Grid.ColumnProperty, j); 79 boIn.SetValue(Grid.RowProperty, i); 80 boIn.Tag = "autoBorder"; 81 gd.Children.Add(boIn); 82 } 83 } 84 } 85 86 87 public static Color ConvertFromString(string htmlColor) 88 { 89 htmlColor = htmlColor.Replace("#", ""); 90 byte a = 0xff, r = 0, g = 0, b = 0; 91 switch (htmlColor.Length) 92 { 93 case 3: 94 r = byte.Parse(htmlColor.Substring(0, 1), System.Globalization.NumberStyles.HexNumber); 95 g = byte.Parse(htmlColor.Substring(1, 1), System.Globalization.NumberStyles.HexNumber); 96 b = byte.Parse(htmlColor.Substring(2, 1), System.Globalization.NumberStyles.HexNumber); 97 break; 98 case 4: 99 a = byte.Parse(htmlColor.Substring(0, 1), System.Globalization.NumberStyles.HexNumber); 100 r = byte.Parse(htmlColor.Substring(1, 1), System.Globalization.NumberStyles.HexNumber); 101 g = byte.Parse(htmlColor.Substring(2, 1), System.Globalization.NumberStyles.HexNumber); 102 b = byte.Parse(htmlColor.Substring(3, 1), System.Globalization.NumberStyles.HexNumber); 103 break; 104 case 6: 105 r = byte.Parse(htmlColor.Substring(0, 2), System.Globalization.NumberStyles.HexNumber); 106 g = byte.Parse(htmlColor.Substring(2, 2), System.Globalization.NumberStyles.HexNumber); 107 b = byte.Parse(htmlColor.Substring(4, 2), System.Globalization.NumberStyles.HexNumber); 108 break; 109 case 8: 110 a = byte.Parse(htmlColor.Substring(0, 2), System.Globalization.NumberStyles.HexNumber); 111 r = byte.Parse(htmlColor.Substring(2, 2), System.Globalization.NumberStyles.HexNumber); 112 g = byte.Parse(htmlColor.Substring(4, 2), System.Globalization.NumberStyles.HexNumber); 113 b = byte.Parse(htmlColor.Substring(6, 2), System.Globalization.NumberStyles.HexNumber); 114 break; 115 } 116 return Color.FromArgb(a, r, g, b); 117 } 118 119 }