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); }
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; } }