private FrameworkElement CreateContentAndInitializeUIInternal(Func <FrameworkElement> baseCreator) { var filterExp = string.Empty; const string propName = "MIUSEFILTER"; // если контрол уже создан - незачем его пересоздавать. всю инициализацию нужно вынести перед if (Content != null) { return(Content as FrameworkElement); } // если модель умеет создавать контролы var fieldProvider = ParentViewModel as IFieldProvider; if (fieldProvider != null) { // если у модели есть свой контрол для поля, то используем его var element = fieldProvider.GetElement(_field); if (element != null) { return(element); } } if (FieldName == propName) { var vm = ParentViewModel as ICustomFilterControlItemsProvider; var obj = DataContext as WMSBusinessObject; if (obj != null) { if (obj.GetProperty(propName) != null) { filterExp = obj.GetProperty(propName).ToString(); } } if (vm != null) { return(new CustomFilterMemoEditControl(vm.GetFields(), filterExp)); } } if (!string.IsNullOrEmpty(LookUpCode) && !typeof(IList).IsAssignableFrom(FieldType)) { var lookupInfo = LookupHelper.GetLookupInfo(LookUpCode); switch (lookupInfo.LookUpType) { case LookupType.Default: return(new CustomLookUpEdit { Name = "clue" + Name, LookUpCodeEditorVarFilterExt = LookUpVarFilterExt, LookUpCodeEditorFilterExt = LookUpFilterExt, ParentViewModelSource = ParentViewModelSource, LookUpCodeEditor = LookUpCode, LookupButtonEnabled = LookupButtonEnabled }); case LookupType.Combobox: return(new CustomComboBoxEdit { LookUpCodeEditorVarFilterExt = LookUpVarFilterExt, LookUpCodeEditorFilterExt = LookUpFilterExt, ParentViewModelSource = ParentViewModelSource, LookUpCodeEditor = LookUpCode }); //case LookupType.LookupOpt: // return new CustomLookUpOpt { LookUpCodeEditorVarFilterExt = LookUpVarFilterExt, LookUpCodeEditorFilterExt = LookUpFilterExt, ParentViewModelSource = ParentViewModelSource, AllowAddNew = lookup.ObjectLookupAllowNew, LookUpCodeEditor = LookUpCode }; default: throw new DeveloperException("Undefined value '{0}' in ObjectLookupSimple.", lookupInfo.LookUpType); } } if (IsSubImageView) { return(new SubImageView { ParentViewModel = ParentViewModel, ShowMenu = ShowMenu }); } if (typeof(IList).IsAssignableFrom(FieldType)) { Type itemType = null; if (FieldType.IsGenericType) { itemType = FieldType.GetGenericArguments().FirstOrDefault(); if (typeof(CustomParamValue).IsAssignableFrom(itemType)) { return new CustomParamValueSubTreeView(FieldType, itemType) { ParentViewModel = ParentViewModel } } ; if (typeof(Entity2GC).IsAssignableFrom(itemType) && !string.IsNullOrEmpty(LookUpCode)) { return new GCListView(FieldName, LookUpCode) { ParentViewModel = ParentViewModel } } ; } return(new SubListView(FieldType, itemType, FieldName) { ParentViewModel = ParentViewModel }); } if (IsMemoView) { return new MemoEdit { ShowIcon = false, PopupWidth = 250, MemoTextWrapping = TextWrapping.Wrap, MemoVerticalScrollBarVisibility = ScrollBarVisibility.Auto } } ; if (!string.IsNullOrEmpty(DisplayFormat) && Regex.IsMatch(DisplayFormat, @"[\*\#\/]+$") && typeof(string).IsAssignableFrom(FieldType)) { return(new PasswordBoxEdit { AllowNullInput = FieldType.IsNullable(), EditValueType = FieldType.GetNonNullableType(), ShowError = false, ShowErrorToolTip = false, InvalidValueBehavior = InvalidValueBehavior.AllowLeaveEditor, NullText = KeyLink }); } //вводим режим работы с формулами if (IsFieldFormulaEnable()) { // создаем редактор с кнопкой _edit = new ButtonEdit { HorizontalContentAlignment = HorizontalAlignment.Left, AllowSpinOnMouseWheel = false }; var notNullableType = FieldType.GetNonNullableType(); if (notNullableType.IsPrimitive || notNullableType == typeof(decimal)) { _edit.AllowNullInput = FieldType.IsNullable(); _edit.EditValueType = notNullableType; _edit.MaskType = MaskType.Numeric; var dataType = GetPropertyDataType(); //if (dataType == DataType.Currency) так было в v.13.1 if (dataType == PropertyDataType.Currency) { _edit.Mask = "C"; _edit.MaskUseAsDisplayFormat = true; _edit.HorizontalContentAlignment = CurrencyValueAlignment; } } _edit.AllowDefaultButton = false; // создаем контекстное меню _edit.ContextMenuOpening += (s1, a1) => { if (_edit.ContextMenu == null) { return; } _edit.ContextMenu.Items.Clear(); if (!InFormulaMode) { return; } // добавляем св-ва var properties = TypeDescriptor.GetProperties(DataContext.GetType()).Cast <PropertyDescriptor>(); foreach (var p in properties) { var mi = new MenuItem { Header = p.DisplayName }; mi.Click += (s2, a2) => { Clipboard.SetText("${" + p.DisplayName + "}"); _edit.Paste(); }; _edit.ContextMenu.Items.Add(mi); } //TODO: добавляем переменные, которые уже определены }; // создаем кнопку включения режима формулы var button = new ButtonInfo(); button.GlyphKind = GlyphKind.Apply; //button.Content = new Image { Source = DCL.Resources.ImageResources.DCLDefault16.GetBitmapImage() }; var label = new Label(); label.Content = "Включение режима ввода формул.\n#{<name>;<range>} - ввод диапазона;\n${<name>} - использование переменной;\n\nФорматирование:\nFORMAT(\"%format expression%\", argument)"; button.ToolTip = label; button.Click += FormulaModeButtonClick; _edit.Buttons.Add(button); return(_edit); } // HACK: 2013.12.06 - проблемы из-за перехода DevExp c 13.1.6 до 13.2.5 //var result = base.CreateContentAndInitializeUI(); var result = CreateContentInternal(baseCreator); if (IsFocused || SetFocus) { result.BackgroundFocus(); } if (result is DateEdit) { result = new CustomDateTimeEdit { AllowNullInput = true, AllowSpinOnMouseWheel = true }; } else if (result is TextEdit) { // NOTE: всегда выравниваем текст по левому краю ((TextEdit)result).HorizontalContentAlignment = HorizontalAlignment.Left; // NOTE: отключаем накручивание в полях TextEdit ((TextEdit)result).AllowSpinOnMouseWheel = false; // NOTE: всегда умещать весь текст в контроле ((TextEdit)result).TextWrapping = TextWrapping.Wrap; if (String.IsNullOrEmpty(BackGroundColor)) { return(result); } var brushconverter = new BrushConverter(); ((TextEdit)result).Background = brushconverter.ConvertFromString(BackGroundColor) as Brush; } return(result); }