diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/EditorDefinition.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/EditorDefinition.cs index a1792702..59f03084 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/EditorDefinition.cs +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/EditorDefinition.cs @@ -1,5 +1,4 @@ -using System.Collections.Generic; -using System; +using System; using System.Windows; namespace Microsoft.Windows.Controls.PropertyGrid @@ -8,8 +7,8 @@ namespace Microsoft.Windows.Controls.PropertyGrid { public DataTemplate EditorTemplate { get; set; } - private List _properties = new List(); - public List Properties + private PropertyDefinitionCollection _properties = new PropertyDefinitionCollection(); + public PropertyDefinitionCollection PropertiesDefinitions { get { return _properties; } set { _properties = value; } diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/EditorDefinitionCollection.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/EditorDefinitionCollection.cs index 456c39b7..a67adc7d 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/EditorDefinitionCollection.cs +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/EditorDefinitionCollection.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Collections.ObjectModel; namespace Microsoft.Windows.Controls.PropertyGrid @@ -11,7 +12,7 @@ namespace Microsoft.Windows.Controls.PropertyGrid { foreach (var item in Items) { - if (item.Properties.Contains(propertyName)) + if (item.PropertiesDefinitions.Where(x => x.Name == propertyName).Any()) return item; } diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/IEditorDefinition.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/IEditorDefinition.cs index bb43ecc8..5d8c0039 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/IEditorDefinition.cs +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/IEditorDefinition.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Windows; namespace Microsoft.Windows.Controls.PropertyGrid @@ -7,7 +6,7 @@ namespace Microsoft.Windows.Controls.PropertyGrid public interface IEditorDefinition { DataTemplate EditorTemplate { get; set; } - List Properties { get; set; } + PropertyDefinitionCollection PropertiesDefinitions { get; set; } Type TargetType { get; set; } } } diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/PropertyDefinition.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/PropertyDefinition.cs new file mode 100644 index 00000000..2c66aac6 --- /dev/null +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/PropertyDefinition.cs @@ -0,0 +1,9 @@ +using System; + +namespace Microsoft.Windows.Controls.PropertyGrid +{ + public class PropertyDefinition + { + public string Name { get; set; } + } +} diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/PropertyDefinitionCollection.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/PropertyDefinitionCollection.cs new file mode 100644 index 00000000..0c8ca829 --- /dev/null +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/PropertyDefinitionCollection.cs @@ -0,0 +1,21 @@ +using System.Collections.ObjectModel; + +namespace Microsoft.Windows.Controls.PropertyGrid +{ + public class PropertyDefinitionCollection : ObservableCollection + { + public PropertyDefinition this[string propertyName] + { + get + { + foreach (var item in Items) + { + if (item.Name == propertyName) + return item; + } + + return null; + } + } + } +} diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/PropertyGrid.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/PropertyGrid.cs index 0c9c38df..7502d665 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/PropertyGrid.cs +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/PropertyGrid/Implementation/PropertyGrid.cs @@ -8,6 +8,7 @@ using System.Windows.Controls.Primitives; using System.Windows.Data; using System.Windows.Input; using Microsoft.Windows.Controls.PropertyGrid.Commands; +using System.Reflection; namespace Microsoft.Windows.Controls.PropertyGrid { @@ -33,6 +34,17 @@ namespace Microsoft.Windows.Controls.PropertyGrid #endregion //AdvancedOptionsMenu + #region AutoGenerateProperties + + public static readonly DependencyProperty AutoGeneratePropertiesProperty = DependencyProperty.Register("AutoGenerateProperties", typeof(bool), typeof(PropertyGrid), new UIPropertyMetadata(true)); + public bool AutoGenerateProperties + { + get { return (bool)GetValue(AutoGeneratePropertiesProperty); } + set { SetValue(AutoGeneratePropertiesProperty, value); } + } + + #endregion //AutoGenerateProperties + #region DisplaySummary public static readonly DependencyProperty DisplaySummaryProperty = DependencyProperty.Register("DisplaySummary", typeof(bool), typeof(PropertyGrid), new UIPropertyMetadata(true)); @@ -46,7 +58,7 @@ namespace Microsoft.Windows.Controls.PropertyGrid #region EditorDefinitions - public static readonly DependencyProperty EditorDefinitionsProperty = DependencyProperty.Register("EditorDefinitions", typeof(EditorDefinitionCollection), typeof(PropertyGrid), new UIPropertyMetadata(new EditorDefinitionCollection())); + public static readonly DependencyProperty EditorDefinitionsProperty = DependencyProperty.Register("EditorDefinitions", typeof(EditorDefinitionCollection), typeof(PropertyGrid), new UIPropertyMetadata(null)); public EditorDefinitionCollection EditorDefinitions { get { return (EditorDefinitionCollection)GetValue(EditorDefinitionsProperty); } @@ -124,6 +136,17 @@ namespace Microsoft.Windows.Controls.PropertyGrid #endregion //Properties + #region PropertyDefinitions + + public static readonly DependencyProperty PropertyDefinitionsProperty = DependencyProperty.Register("PropertyDefinitions", typeof(PropertyDefinitionCollection), typeof(PropertyGrid), new UIPropertyMetadata(null)); + public PropertyDefinitionCollection PropertyDefinitions + { + get { return (PropertyDefinitionCollection)GetValue(PropertyDefinitionsProperty); } + set { SetValue(PropertyDefinitionsProperty, value); } + } + + #endregion //PropertyDefinitions + #region SelectedObject public static readonly DependencyProperty SelectedObjectProperty = DependencyProperty.Register("SelectedObject", typeof(object), typeof(PropertyGrid), new UIPropertyMetadata(null, OnSelectedObjectChanged)); @@ -275,6 +298,8 @@ namespace Microsoft.Windows.Controls.PropertyGrid public PropertyGrid() { + EditorDefinitions = new EditorDefinitionCollection(); + PropertyDefinitions = new PropertyDefinitionCollection(); CommandBindings.Add(new CommandBinding(PropertyGridCommands.ClearFilter, ClearFilter, CanClearFilter)); } @@ -286,8 +311,11 @@ namespace Microsoft.Windows.Controls.PropertyGrid { base.OnApplyTemplate(); - _dragThumb = (Thumb)GetTemplateChild("PART_DragThumb"); - _dragThumb.DragDelta += DragThumb_DragDelta; + if (_dragThumb != null) + _dragThumb.DragDelta -= DragThumb_DragDelta; + _dragThumb = GetTemplateChild("PART_DragThumb") as Thumb; + if (_dragThumb != null) + _dragThumb.DragDelta += DragThumb_DragDelta; } protected override void OnPreviewKeyDown(KeyEventArgs e) @@ -355,7 +383,26 @@ namespace Microsoft.Windows.Controls.PropertyGrid try { - var descriptors = PropertyGridUtilities.GetPropertyDescriptors(instance); + PropertyDescriptorCollection descriptors = PropertyGridUtilities.GetPropertyDescriptors(instance); + + if (!AutoGenerateProperties) + { + List specificProperties = new List(); + foreach (PropertyDefinition pd in PropertyDefinitions) + { + foreach (PropertyDescriptor descriptor in descriptors) + { + if (descriptor.Name == pd.Name) + { + specificProperties.Add(descriptor); + break; + } + } + } + + descriptors = new PropertyDescriptorCollection(specificProperties.ToArray()); + } + foreach (PropertyDescriptor descriptor in descriptors) { if (descriptor.IsBrowsable) diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj index e104e7c5..d7f60f2d 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/WPFToolkit.Extended.csproj @@ -268,6 +268,8 @@ + +