/// <summary> /// 设置数据 /// </summary> /// <param name="visual"></param> /// <param name="datas"></param> private static void SetControlData(Visual visual, List <SaveData> datas) { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(visual); i++) { Visual childVisual = (Visual)VisualTreeHelper.GetChild(visual, i); if (childVisual != null) { if (childVisual is TextBox) { var txt = childVisual as TextBox; if (txt.Name != null && !"".Equals(txt.Name)) { var data = datas.FirstOrDefault(t => t.ControlId == txt.Name) ?? new SaveData(); if (data.ControlValue.IsNullOrEmptyImpl()) { txt.SetValue(TextBox.TextProperty, data.ControlValue); //txt.Text = data.ControlValue; } } } else if (childVisual is ComboBox) { var cmb = childVisual as ComboBox; if (cmb.Name != null && !"".Equals(cmb.Name)) { var data = datas.FirstOrDefault(t => t.ControlId == cmb.Name) ?? new SaveData(); if (data.ControlValue.IsNullOrEmptyImpl()) { cmb.Text = data.ControlValue; if (cmb.SelectedIndex == -1 && cmb.Items.Count > 0 && !cmb.IsEditable) { cmb.SelectedIndex = 0; } // cmb.Text = data.ControlValue; } } } else if (childVisual is RadioButton) { var cmb = childVisual as RadioButton; var data = datas.FirstOrDefault(t => t.ControlId == cmb.Name); if (data != null && cmb.Name != null && data.ControlValue.IsNullOrEmptyImpl()) { bool isCheck = ConvertToBool(data.ControlValue); if (isCheck) //如果是false则不给相应radio赋值,避免不必要的界面交互造成的bug { cmb.IsChecked = isCheck; } } } else if (childVisual is CheckBox) { var cmb = childVisual as CheckBox; var data = datas.FirstOrDefault(t => t.ControlId == cmb.Name); if (data != null && cmb.Name != null && data.ControlValue != "") { cmb.IsChecked = ConvertToBool(data.ControlValue); } } else if (childVisual is ListBox) { var cmb = childVisual as ListBox; var data = datas.FirstOrDefault(t => t.ControlId == cmb.Name); if (data != null && cmb.Name != null && data.ControlValue != "") { int index = 0; if (int.TryParse(data.ControlValue, out index)) { if (cmb.Items.Count > i) { cmb.SelectedIndex = index; } } } } else if (visual is UserControl && visual is IControlDataProvider) { Control control = visual as Control; var data = datas.FirstOrDefault(t => t.ControlId == control.Name); if (data != null && control.Name != null && data.ControlValue != "") { IControlDataProvider g = visual as IControlDataProvider; g.SetControlData(data.ControlValue); } } else { SetControlData(childVisual, datas); } } } }
/// <summary> /// 获取数据 /// </summary> /// <param name="visual"></param> /// <param name="datas"></param> private static void GetControlData(Visual visual, List <SaveData> datas) { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(visual); i++) { Visual childVisual = (Visual)VisualTreeHelper.GetChild(visual, i); if (childVisual != null) { if (childVisual is TextBox) { var txt = childVisual as TextBox; if ("".Equals(txt.Name) || txt.Name.Contains("_")) { continue; } datas.Add(new SaveData("", "TextBox", txt.Name, txt.Text)); } else if (childVisual is ComboBox) { var cmb = childVisual as ComboBox; if ("".Equals(cmb.Name) || cmb.Name.Contains("_")) { continue; } datas.Add(new SaveData("", "ComboBox", cmb.Name, cmb.Text)); } else if (childVisual is RadioButton) { var cmb = childVisual as RadioButton; if ("".Equals(cmb.Name) || cmb.Name.Contains("_")) { continue; } datas.Add(new SaveData("", "RadioButton", cmb.Name, cmb.IsChecked.ToString())); } else if (childVisual is CheckBox) { var cmb = childVisual as CheckBox; if ("".Equals(cmb.Name) || cmb.Name.Contains("_")) { continue; } datas.Add(new SaveData("", "CheckBox", cmb.Name, cmb.IsChecked.ToString())); } else if (childVisual is ListBox) { var cmb = childVisual as ListBox; if ("".Equals(cmb.Name) || cmb.Name.Contains("_")) { continue; } datas.Add(new SaveData("", "ListBox", cmb.Name, cmb.SelectedIndex.ToString())); } else if (visual is UserControl && visual is IControlDataProvider) { Control control = visual as Control; if ("".Equals(control.Name) || control.Name.Contains("_")) { continue; } IControlDataProvider g = visual as IControlDataProvider; datas.Add(new SaveData("", "IControlDataProvider", control.Name, g.GetControlData())); } GetControlData(childVisual, datas); } } }