public FrameworkElement GetSimpleItemsControl() { StackPanel spanel = new StackPanel(); spanel.Orientation = Orientation.Vertical; var simplelist = InitSimpleItems(); simplelist.Where(x => x.isPresent).ForEach(x => { var sitem = config.parameters.simpleItem.FirstOrDefault(si => si.name == x.xname); if (sitem != null) { spanel.Children.Add(GetSimpleEditorCtrl(x.xtype, sitem.name, sitem)); } }); simplelist.Where(x => !x.isPresent).ForEach(x => { var sitem = new ItemList.SimpleItem() { name = x.xname, value = "" }; FrameworkElement elem = GetSimpleEditorCtrl(x.xtype, x.xname, sitem); CheckBox chBox = new CheckBox(); chBox.Margin = new Thickness(40, 0, 0, 0); chBox.Content = "Is element enabled"; chBox.CreateBinding(CheckBox.IsCheckedProperty, (itemDescr)x, s => { elem.IsEnabled = s.isPresent; return s.isPresent; }, (o, v) => { o.isPresent = v; if (v) { elem.IsEnabled = true; if (config.parameters != null && config.parameters.simpleItem != null) { var items = config.parameters.simpleItem; config.parameters.simpleItem = items.Append(sitem).ToArray(); } else { if (config.parameters == null) { config.parameters = new global::onvif.services.ItemList(); } config.parameters.simpleItem = new ItemList.SimpleItem[] { sitem }; } } else { elem.IsEnabled = false; if (config.parameters.simpleItem.Contains(sitem)) { int count = config.parameters.simpleItem.Count(); var arr = new ItemList.SimpleItem[count - 1]; int cnt = 0; for (int i = 0; i < count; i++) { if (config.parameters.simpleItem[i] != sitem) { arr[cnt] = config.parameters.simpleItem[i]; cnt++; } } config.parameters.simpleItem = arr; } } }); StackPanel tmppanel = new StackPanel(); tmppanel.Orientation = Orientation.Horizontal; tmppanel.Children.Add(elem); tmppanel.Children.Add(chBox); spanel.Children.Add(tmppanel); }); return spanel; }
FrameworkElement GetValueEditor(elementDescr element) { FrameworkElement felem = null; switch (element.QName.Name) { case "int": IntegerUpDown numUp = new IntegerUpDown(); numUp.Margin = new Thickness(3); numUp.Increment = 1; numUp.VerticalAlignment = VerticalAlignment.Center; numUp.MinWidth = 50; numUp.CreateBinding(IntegerUpDown.ValueProperty, element, x => { int val = 0; int.TryParse(element.Value, out val); return val; }, (o, v) => { o.Value = v.ToString(); }); felem = numUp; break; case "float": DoubleUpDown doubleUp = new DoubleUpDown(); doubleUp.CultureInfo = System.Globalization.CultureInfo.InvariantCulture; doubleUp.Margin = new Thickness(3); doubleUp.Increment = 0.01f; doubleUp.FormatString = "F3"; doubleUp.VerticalAlignment = VerticalAlignment.Center; doubleUp.MinWidth = 50; doubleUp.CreateBinding(DoubleUpDown.ValueProperty, element, x => { float val = 0; //float.TryParse(element.Value, out val); try { val = XmlConvert.ToSingle(element.Value); }catch(Exception err){ dbg.Error(err); } return val; }, (o, v) => { o.Value = XmlConvert.ToString(v); }); felem = doubleUp; break; case "boolean": CheckBox chBox = new CheckBox(); chBox.Margin = new Thickness(3); chBox.CreateBinding(CheckBox.IsCheckedProperty, element, x => { bool val = false; bool.TryParse(element.Value, out val); return val; }, (o, v) => { o.Value = v.ToString(); }); felem = chBox; break; default: TextBox tbox = new TextBox(); tbox.Margin = new Thickness(3); tbox.CreateBinding(TextBox.TextProperty, element, x => x.Value, (o, v) => { o.Value = v; }); tbox.MinWidth = 50; tbox.VerticalAlignment = System.Windows.VerticalAlignment.Center; felem = tbox; break; } return felem; }