예제 #1
0
        private void FillGroup(LayoutGroup group)
        {
            if (_model.Source != null)
            {
                group.DataContext = _model.Source;
            }

            Action <Control, ValueDataField> setPropertiesHandler = (control, valueDataField) =>
            {
                if (_model.FontSize > 0)
                {
                    control.FontSize = _model.FontSize;
                }

                control.Tag = valueDataField;

                //т.к. испоьзуем ExpandoObject - регистрируем здесь
                RegisterName(valueDataField.Name, control);
            };

            var layoutGroups = new Dictionary <string, LayoutGroup>();

            foreach (var field in _model.Fields.OrderBy(p => p.Order).ToArray())
            {
                var oldLayout = FindName(field.Name);
                if (oldLayout != null)
                {
                    continue;
                }

                UIElement child = null;
                if (field.FieldType == typeof(FooterMenu) || field.FieldType == typeof(Button) || field.FieldType == typeof(IFooterMenu))
                {
                    var button = new Button
                    {
                        Content = field.Caption,
                        HorizontalContentAlignment = HorizontalAlignment.Left
                    };

                    if (_model.FontSize > 0)
                    {
                        button.FontSize = _model.FontSize;
                    }

                    var layoutItem = new LayoutItem
                    {
                        Name       = field.Name,
                        IsEnabled  = !field.IsEnabled.HasValue || field.IsEnabled.Value,
                        Visibility = field.Visible ? Visibility.Visible : Visibility.Collapsed,
                        Content    = button
                    };
                    setPropertiesHandler(layoutItem, field);
                    child = layoutItem;
                }
                else
                {
                    var layoutItem = new CustomDataLayoutItem(_model.IsWfDesignMode, field)
                    {
                        IsVisibilitySetOutside    = true,
                        IsDisplayFormatSetOutside = true
                    };
                    setPropertiesHandler(layoutItem, field);

                    var layoutGroupName = LayoutGroupHelper.GetLayoutGroupNameFromField(field, _model.IsWfDesignMode);
                    if (string.IsNullOrEmpty(layoutGroupName))
                    {
                        child = layoutItem;
                    }
                    else
                    {
                        LayoutGroup layoutGroup;
                        if (!layoutGroups.ContainsKey(layoutGroupName))
                        {
                            layoutGroup = LayoutGroupHelper.CreateLayoutGroup(layoutGroupName);
                            layoutGroups[layoutGroupName] = layoutGroup;
                            RegisterName(layoutGroupName, layoutGroup);
                            group.Children.Add(layoutGroup);
                        }

                        layoutGroup = layoutGroups[layoutGroupName];
                        layoutGroup.Children.Add(layoutItem);
                    }
                }

                if (child != null)
                {
                    group.Children.Add(child);
                }
            }
        }
예제 #2
0
        private void FillGroup(LayoutGroup group, DialogSourceViewModel vm)
        {
            //TODO: по хорошему нужно писать свой контрол на остнове DataLayout-а (научить правильно биндиться, понимать аттрибуты и т.д.)
            if (vm.Source != null)
            {
                group.DataContext = vm.Source;
            }
            group.Children.Clear();
            var setfocus = false;

            var layoutGroups = new Dictionary <string, LayoutGroup>();

            foreach (var field in vm.Fields.OrderBy(p => p.Order).ToArray())
            {
                var oldLayout = FindName(field.Name);
                if (oldLayout != null)
                {
                    continue;
                }
                if (field.SetFocus)
                {
                    setfocus = true;
                }

                UIElement child = null;
                if (field.FieldType == typeof(Button) || field.FieldType == typeof(CustomButton))
                {
                    var layoutItem = new LayoutItem
                    {
                        Name       = field.Name,
                        IsEnabled  = field.IsEnabled.HasValue && field.IsEnabled.Value,
                        Visibility = field.Visible ? Visibility.Visible : Visibility.Collapsed,
                        Content    = MenuHelper.CreateCustomButton(field, vm.MenuCommand, vm.FontSize, false)
                    };
                    RegisterName(field.Name, layoutItem);
                    child = layoutItem;
                }
                else if (field.FieldType == typeof(IFooterMenu) || field.FieldType == typeof(FooterMenu))
                {
                    MenuHelper.CreateFooterMenu(footerMenuControl, field, vm.MenuCommand, vm.FontSize, false);
                    continue;
                }
                else
                {
                    var layoutItem = new CustomDataLayoutItem(vm.IsWfDesignMode, field)
                    {
                        IsVisibilitySetOutside    = true,
                        IsDisplayFormatSetOutside = true,

                        FontSize = vm.FontSize,

                        IsReadOnlySetOutside = true,
                        TooltipDisable       = true,
                        CloseDialogCommand   = vm.MenuCommand
                    };
                    RegisterName(field.Name, layoutItem);

                    var layoutGroupName = LayoutGroupHelper.GetLayoutGroupNameFromField(field, vm.IsWfDesignMode);
                    if (string.IsNullOrEmpty(layoutGroupName))
                    {
                        child = layoutItem;
                    }
                    else
                    {
                        LayoutGroup layoutGroup;
                        if (!layoutGroups.ContainsKey(layoutGroupName))
                        {
                            layoutGroup = LayoutGroupHelper.CreateLayoutGroup(layoutGroupName);
                            layoutGroups[layoutGroupName] = layoutGroup;
                            RegisterName(layoutGroupName, layoutGroup);
                            group.Children.Add(layoutGroup);
                        }

                        layoutGroup = layoutGroups[layoutGroupName];
                        layoutGroup.Children.Add(layoutItem);
                    }
                }

                if (child != null)
                {
                    group.Children.Add(child);
                }
            }

            if (!setfocus)
            {
                KeyHelper.SetFocusElement(group.Children);
            }

            objectDataLayout.RestoreLayout(vm.LayoutValue);
        }