예제 #1
0
        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);
        }