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     }

 

你可能感兴趣的:(silverlight)