예제 #1
0
        protected virtual void EditMultiple(IList <IDesignableControl> targets)
        {
            //Get common properties and then do similar to edit single on the first one,
            //CheckPreviousEditInstance() will deal with sets
            List <DesignablePropertyDescriptor> allProps = new List <DesignablePropertyDescriptor>();

            foreach (var idt in targets)
            {
                allProps.AddRange(Inspector.Inspect(idt));
            }
            var hashes = from pd in allProps
                         group pd by pd.GetHashCode() into g
                             where g.Count() == targets.Count
                         select new { g.Key };
            var dups = (from pd in allProps
                        join h in hashes on pd.GetHashCode() equals h.Key
                        select pd).Distinct();


            List <DesignablePropertyDescriptor> common = dups.ToList <DesignablePropertyDescriptor>();

            var propCount = 0;

            foreach (var descriptor in common)
            {
                _propertyPart.RowDefinitions.Add(new RowDefinition());
                TextBlock tb = new TextBlock();
                tb.Text = descriptor.DisplayName;
                tb.SetValue(Grid.RowProperty, propCount);
                tb.SetValue(Grid.ColumnProperty, 0);
                tb.Style = _descriptionTextBlockStyle;
                //
                FrameworkElement displayElement = EditServiceHelper.GetDisplayInstance(targets[0], descriptor);

                if (null == displayElement)
                {
                    displayElement = new TextBlock
                    {
                        Text = "No display element found"
                    };
                }

                displayElement.SetValue(Grid.RowProperty, propCount);
                displayElement.SetValue(Grid.ColumnProperty, 1);
                displayElement.GotFocus            += new RoutedEventHandler(displayElement_GotFocus);
                displayElement.MouseLeftButtonDown += new MouseButtonEventHandler(displayElement_MouseLeftButtonDown);

                Model.SetDisplayElement(descriptor, displayElement);

                _propertyPart.Children.Add(tb);
                _propertyPart.Children.Add(displayElement);
                ++propCount;
            }


            Model.SetProperties(common);
        }
예제 #2
0
        protected virtual void EditSingle(IDesignableControl idt)
        {
            List <DesignablePropertyDescriptor> props = Inspector.Inspect(idt);

            Model.SetProperties(props);
            var propCount = 0;

            foreach (var descriptor in props)
            {
                _propertyPart.RowDefinitions.Add(new RowDefinition());
                TextBlock tb = new TextBlock();
                tb.Text = descriptor.DisplayName;
                tb.SetValue(Grid.RowProperty, propCount);
                tb.SetValue(Grid.ColumnProperty, 0);
                tb.Style = _descriptionTextBlockStyle;
                //
                FrameworkElement displayElement = EditServiceHelper.GetDisplayInstance(idt, descriptor);

                if (null == displayElement)
                {
                    displayElement = new TextBlock
                    {
                        Text = "No display element found"
                    };
                }

                displayElement.SetValue(Grid.RowProperty, propCount);
                displayElement.SetValue(Grid.ColumnProperty, 1);
                displayElement.GotFocus            += new RoutedEventHandler(displayElement_GotFocus);
                displayElement.MouseLeftButtonDown += new MouseButtonEventHandler(displayElement_MouseLeftButtonDown);

                Model.SetDisplayElement(descriptor, displayElement);

                _propertyPart.Children.Add(tb);
                _propertyPart.Children.Add(displayElement);
                ++propCount;
            }
        }