Browse Source

- Improve PropertyGrid performance (select, move, undo much faster now)

- Try another category set
- In PropertyGrid: Colorize Binding, Resources; "(type)" / disable TextBox where needed
- Bug fixing: XamlProperty.IsSet now works correctly, ...

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@3434 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Ivan Shumilin 17 years ago
parent
commit
b2015b1d0b
  1. 2
      samples/XamlDesigner/XamlDesigner.csproj
  2. 578
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/BasicMetadata.cs
  3. 1
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/NumericUpDown.xaml
  4. 16
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Converters.cs
  5. 2
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/ExtensionMethods.cs
  6. 1
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SnaplinePlacementBehavior.cs
  7. 17
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/NumberEditor.xaml
  8. 173
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs
  9. 31
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.xaml
  10. 1
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj
  11. 14
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlModelProperty.cs
  12. 23
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlProperty.cs
  13. 2
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/DesignItemProperty.cs
  14. 124
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Metadata.cs
  15. 41
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/PropertyGrid/Category.cs
  16. 172
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/PropertyGrid/PropertyNode.cs
  17. 44
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/PropertyGrid/SortedObservableCollection.cs
  18. 3
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/WpfDesign.csproj

2
samples/XamlDesigner/XamlDesigner.csproj

@ -134,7 +134,7 @@ @@ -134,7 +134,7 @@
<ItemGroup>
<None Include="NewFileTemplate.xaml">
<SubType>Designer</SubType>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<Page Include="BitmapButton.xaml">
<Generator>MSBuild:Compile</Generator>

578
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/BasicMetadata.cs

@ -13,23 +13,14 @@ using System.Windows.Media.Media3D; @@ -13,23 +13,14 @@ using System.Windows.Media.Media3D;
using System.Windows.Shapes;
using System.Windows.Media.Animation;
using System.Windows.Data;
using System.Windows.Automation;
using System.Windows.Media.Effects;
using System.Windows.Navigation;
namespace ICSharpCode.WpfDesign.Designer
{
public class BasicMetadata
{
public const string Category_Brushes = "Brushes";
public const string Category_Text = "Text";
public const string Category_Appearance = "Appearance";
public const string Category_Layout = "Layout";
public const string Category_Common_Properties = "Common Properties";
public const string Category_Misc = "Misc";
public const string Category_Transform = "Transform";
public const string Category_Media = "Media";
public const string Category_Light = "Light";
public const string Category_Camera = "Camera";
public const string Category_Materials = "Materials";
public BasicMetadata()
{
Metadata.AddStandardValues(typeof(Brush), typeof(Brushes));
@ -42,454 +33,103 @@ namespace ICSharpCode.WpfDesign.Designer @@ -42,454 +33,103 @@ namespace ICSharpCode.WpfDesign.Designer
Metadata.AddStandardValues(typeof(TextDecorationCollection), typeof(TextDecorations));
Metadata.AddStandardValues(typeof(FontFamily), Fonts.SystemFontFamilies);
//Metadata.AddStandardValues(typeof(ICommand), typeof(ApplicationCommands));
//Metadata.AddStandardValues(typeof(ICommand), typeof(EditingCommands));
//Metadata.AddStandardValues(typeof(ICommand), typeof(NavigationCommands));
//Metadata.AddStandardValues(typeof(ICommand), typeof(ComponentCommands));
//Metadata.AddStandardValues(typeof(ICommand), typeof(MediaCommands));
Metadata.CategoryOrder = new[] {
Category_Brushes,
Category_Appearance,
Category_Layout,
Category_Common_Properties,
Category_Text,
Category_Transform,
Category_Media,
Category_Light,
Category_Camera,
Category_Brushes,
Category_Materials,
Category_Misc
};
Metadata.AddStandardValues(typeof(ICommand), typeof(ApplicationCommands));
Metadata.AddStandardValues(typeof(ICommand), typeof(EditingCommands));
Metadata.AddStandardValues(typeof(ICommand), typeof(NavigationCommands));
Metadata.AddStandardValues(typeof(ICommand), typeof(ComponentCommands));
Metadata.AddStandardValues(typeof(ICommand), typeof(MediaCommands));
Metadata.AddCategory(AccessText.TextProperty, Category_Text);
Metadata.AddCategory(Block.BorderBrushProperty, Category_Appearance);
Metadata.AddCategory(Block.BorderThicknessProperty, Category_Appearance);
Metadata.AddCategory(Block.BreakColumnBeforeProperty, Category_Text);
Metadata.AddCategory(Block.BreakPageBeforeProperty, Category_Text);
Metadata.AddCategory(Block.LineHeightProperty, Category_Layout);
Metadata.AddCategory(Block.MarginProperty, Category_Layout);
Metadata.AddCategory(Block.PaddingProperty, Category_Layout);
Metadata.AddCategory(Block.TextAlignmentProperty, Category_Text);
Metadata.AddCategory(Border.BorderBrushProperty, Category_Brushes);
Metadata.AddCategory(Border.BorderThicknessProperty, Category_Appearance);
Metadata.AddCategory(Border.CornerRadiusProperty, Category_Appearance);
Metadata.AddCategory(Border.PaddingProperty, Category_Layout);
Metadata.AddCategory(Button.IsCancelProperty, Category_Common_Properties);
Metadata.AddCategory(Button.IsDefaultProperty, Category_Common_Properties);
Metadata.AddCategory(ButtonBase.ClickModeProperty, Category_Misc);
Metadata.AddCategory(ButtonBase.CommandParameterProperty, Category_Misc);
Metadata.AddCategory(ButtonBase.CommandProperty, Category_Misc);
Metadata.AddCategory(ButtonBase.CommandTargetProperty, Category_Misc);
Metadata.AddCategory(ButtonBase.IsPressedProperty, Category_Common_Properties);
Metadata.AddCategory(Camera.TransformProperty, Category_Transform);
Metadata.AddCategory(Canvas.BottomProperty, Category_Layout);
Metadata.AddCategory(Canvas.LeftProperty, Category_Layout);
Metadata.AddCategory(Canvas.RightProperty, Category_Layout);
Metadata.AddCategory(Canvas.TopProperty, Category_Layout);
Metadata.AddCategory(ColumnDefinition.MaxWidthProperty, Category_Layout);
Metadata.AddCategory(ColumnDefinition.MinWidthProperty, Category_Layout);
Metadata.AddCategory(ColumnDefinition.WidthProperty, Category_Layout);
Metadata.AddCategory(ComboBox.IsDropDownOpenProperty, Category_Common_Properties);
Metadata.AddCategory(ComboBox.IsEditableProperty, Category_Common_Properties);
Metadata.AddCategory(ComboBox.StaysOpenOnEditProperty, Category_Common_Properties);
Metadata.AddCategory(ComboBox.TextProperty, Category_Common_Properties);
Metadata.AddCategory(ContentControl.ContentProperty, Category_Common_Properties);
Metadata.AddCategory(ContentControl.ContentTemplateProperty, Category_Misc);
Metadata.AddCategory(ContentControl.ContentTemplateSelectorProperty, Category_Misc);
Metadata.AddCategory(Control.HorizontalContentAlignmentProperty, Category_Layout);
Metadata.AddCategory(Control.PaddingProperty, Category_Layout);
Metadata.AddCategory(Control.VerticalContentAlignmentProperty, Category_Layout);
Metadata.AddCategory(DashStyle.DashesProperty, Category_Appearance);
Metadata.AddCategory(DiffuseMaterial.BrushProperty, Category_Appearance);
Metadata.AddCategory(DirectionalLight.DirectionProperty, Category_Light);
Metadata.AddCategory(DockPanel.DockProperty, Category_Layout);
Metadata.AddCategory(DockPanel.LastChildFillProperty, Category_Layout);
Metadata.AddCategory(DocumentViewer.ExtentHeightProperty, Category_Layout);
Metadata.AddCategory(DocumentViewer.ExtentWidthProperty, Category_Layout);
Metadata.AddCategory(DocumentViewer.HorizontalOffsetProperty, Category_Layout);
Metadata.AddCategory(DocumentViewer.HorizontalPageSpacingProperty, Category_Layout);
Metadata.AddCategory(DocumentViewer.ViewportHeightProperty, Category_Layout);
Metadata.AddCategory(DocumentViewer.ViewportWidthProperty, Category_Layout);
Metadata.AddCategory(DrawingGroup.ClipGeometryProperty, Category_Appearance);
Metadata.AddCategory(DrawingGroup.OpacityProperty, Category_Appearance);
Metadata.AddCategory(EllipseGeometry.CenterProperty, Category_Layout);
Metadata.AddCategory(EmissiveMaterial.BrushProperty, Category_Appearance);
Metadata.AddCategory(Expander.ExpandDirectionProperty, Category_Common_Properties);
Metadata.AddCategory(Expander.IsExpandedProperty, Category_Common_Properties);
Metadata.AddCategory(Figure.HeightProperty, Category_Layout);
Metadata.AddCategory(Figure.HorizontalAnchorProperty, Category_Layout);
Metadata.AddCategory(Figure.HorizontalOffsetProperty, Category_Layout);
Metadata.AddCategory(Figure.VerticalAnchorProperty, Category_Layout);
Metadata.AddCategory(Figure.VerticalOffsetProperty, Category_Layout);
Metadata.AddCategory(Figure.WidthProperty, Category_Layout);
Metadata.AddCategory(FixedPage.ContentBoxProperty, Category_Layout);
Metadata.AddCategory(Floater.WidthProperty, Category_Layout);
Metadata.AddCategory(FlowDocument.ColumnGapProperty, Category_Layout);
Metadata.AddCategory(FlowDocument.ColumnRuleBrushProperty, Category_Layout);
Metadata.AddCategory(FlowDocument.ColumnRuleWidthProperty, Category_Layout);
Metadata.AddCategory(FlowDocument.ColumnWidthProperty, Category_Layout);
Metadata.AddCategory(FlowDocument.IsColumnWidthFlexibleProperty, Category_Layout);
Metadata.AddCategory(FormatConvertedBitmap.AlphaThresholdProperty, Category_Appearance);
Metadata.AddCategory(Frame.NavigationUIVisibilityProperty, Category_Common_Properties);
Metadata.AddCategory(Frame.SourceProperty, Category_Common_Properties);
Metadata.AddCategory(FrameworkElement.ActualHeightProperty, Category_Layout);
Metadata.AddCategory(FrameworkElement.ActualWidthProperty, Category_Layout);
Metadata.AddCategory(FrameworkElement.CursorProperty, Category_Common_Properties);
Metadata.AddCategory(FrameworkElement.DataContextProperty, Category_Common_Properties);
Metadata.AddCategory(FrameworkElement.HeightProperty, Category_Layout);
Metadata.AddCategory(FrameworkElement.HorizontalAlignmentProperty, Category_Layout);
Metadata.AddCategory(FrameworkElement.LayoutTransformProperty, Category_Transform);
Metadata.AddCategory(FrameworkElement.MarginProperty, Category_Layout);
Metadata.AddCategory(FrameworkElement.MaxHeightProperty, Category_Layout);
Metadata.AddCategory(FrameworkElement.MaxWidthProperty, Category_Layout);
Metadata.AddCategory(FrameworkElement.MinHeightProperty, Category_Layout);
Metadata.AddCategory(FrameworkElement.MinWidthProperty, Category_Layout);
Metadata.AddCategory(FrameworkElement.TagProperty, Category_Common_Properties);
Metadata.AddCategory(FrameworkElement.VerticalAlignmentProperty, Category_Layout);
Metadata.AddCategory(FrameworkElement.WidthProperty, Category_Layout);
Metadata.AddCategory(Geometry.TransformProperty, Category_Transform);
Metadata.AddCategory(GeometryDrawing.BrushProperty, Category_Appearance);
Metadata.AddCategory(GeometryGroup.FillRuleProperty, Category_Appearance);
Metadata.AddCategory(GeometryModel3D.BackMaterialProperty, Category_Materials);
Metadata.AddCategory(GeometryModel3D.MaterialProperty, Category_Materials);
Metadata.AddCategory(GlyphRunDrawing.ForegroundBrushProperty, Category_Appearance);
Metadata.AddCategory(Glyphs.FillProperty, Category_Appearance);
Metadata.AddCategory(Glyphs.FontRenderingEmSizeProperty, Category_Text);
Metadata.AddCategory(Glyphs.FontUriProperty, Category_Text);
Metadata.AddCategory(GradientStop.ColorProperty, Category_Appearance);
Metadata.AddCategory(Grid.ColumnProperty, Category_Layout);
Metadata.AddCategory(Grid.ColumnSpanProperty, Category_Layout);
Metadata.AddCategory(Grid.IsSharedSizeScopeProperty, Category_Layout);
Metadata.AddCategory(Grid.RowProperty, Category_Layout);
Metadata.AddCategory(Grid.RowSpanProperty, Category_Layout);
Metadata.AddCategory(Grid.ShowGridLinesProperty, Category_Layout);
Metadata.AddCategory(GridSplitter.DragIncrementProperty, Category_Common_Properties);
Metadata.AddCategory(GridSplitter.ResizeBehaviorProperty, Category_Common_Properties);
Metadata.AddCategory(GridSplitter.ResizeDirectionProperty, Category_Common_Properties);
Metadata.AddCategory(GridSplitter.ShowsPreviewProperty, Category_Common_Properties);
Metadata.AddCategory(HeaderedContentControl.HeaderProperty, Category_Common_Properties);
Metadata.AddCategory(HeaderedContentControl.HeaderTemplateProperty, Category_Misc);
Metadata.AddCategory(HeaderedContentControl.HeaderTemplateSelectorProperty, Category_Misc);
Metadata.AddCategory(Image.SourceProperty, Category_Common_Properties);
Metadata.AddCategory(InkCanvas.EditingModeProperty, Category_Common_Properties);
Metadata.AddCategory(Inline.TextDecorationsProperty, Category_Text);
Metadata.AddCategory(ItemsControl.DisplayMemberPathProperty, Category_Common_Properties);
Metadata.AddCategory(ItemsControl.IsTextSearchEnabledProperty, Category_Common_Properties);
Metadata.AddCategory(ItemsControl.ItemContainerStyleProperty, Category_Misc);
Metadata.AddCategory(ItemsControl.ItemContainerStyleSelectorProperty, Category_Misc);
Metadata.AddCategory(ItemsControl.ItemsSourceProperty, Category_Common_Properties);
Metadata.AddCategory(ItemsControl.ItemTemplateProperty, Category_Misc);
Metadata.AddCategory(ItemsControl.ItemTemplateSelectorProperty, Category_Misc);
Metadata.AddCategory(Light.ColorProperty, Category_Light);
Metadata.AddCategory(Line.X1Property, Category_Appearance);
Metadata.AddCategory(Line.X2Property, Category_Appearance);
Metadata.AddCategory(Line.Y1Property, Category_Appearance);
Metadata.AddCategory(Line.Y2Property, Category_Appearance);
Metadata.AddCategory(LineGeometry.EndPointProperty, Category_Layout);
Metadata.AddCategory(LineGeometry.StartPointProperty, Category_Layout);
Metadata.AddCategory(MediaElement.BalanceProperty, Category_Media);
Metadata.AddCategory(MediaElement.IsMutedProperty, Category_Media);
Metadata.AddCategory(MediaElement.LoadedBehaviorProperty, Category_Media);
Metadata.AddCategory(MediaElement.ScrubbingEnabledProperty, Category_Media);
Metadata.AddCategory(MediaElement.SourceProperty, Category_Media);
Metadata.AddCategory(MediaElement.UnloadedBehaviorProperty, Category_Media);
Metadata.AddCategory(MediaElement.VolumeProperty, Category_Media);
Metadata.AddCategory(MenuItem.IconProperty, Category_Common_Properties);
Metadata.AddCategory(MenuItem.IsCheckableProperty, Category_Common_Properties);
Metadata.AddCategory(MenuItem.IsHighlightedProperty, Category_Common_Properties);
Metadata.AddCategory(MenuItem.IsPressedProperty, Category_Common_Properties);
Metadata.AddCategory(MenuItem.IsSubmenuOpenProperty, Category_Common_Properties);
Metadata.AddCategory(Model3D.TransformProperty, Category_Transform);
Metadata.AddCategory(OrthographicCamera.WidthProperty, Category_Camera);
Metadata.AddCategory(Page.TitleProperty, Category_Common_Properties);
Metadata.AddCategory(Panel.BackgroundProperty, Category_Brushes);
Metadata.AddCategory(Panel.IsItemsHostProperty, Category_Common_Properties);
Metadata.AddCategory(Panel.ZIndexProperty, Category_Layout);
Metadata.AddCategory(PasswordBox.PasswordCharProperty, Category_Text);
Metadata.AddCategory(Path.DataProperty, Category_Appearance);
Metadata.AddCategory(PathGeometry.FillRuleProperty, Category_Appearance);
Metadata.AddCategory(PathSegment.IsStrokedProperty, Category_Appearance);
Metadata.AddCategory(Pen.BrushProperty, Category_Appearance);
Metadata.AddCategory(Pen.DashCapProperty, Category_Appearance);
Metadata.AddCategory(Pen.DashStyleProperty, Category_Appearance);
Metadata.AddCategory(PerspectiveCamera.FieldOfViewProperty, Category_Camera);
Metadata.AddCategory(PointLightBase.ConstantAttenuationProperty, Category_Light);
Metadata.AddCategory(PointLightBase.LinearAttenuationProperty, Category_Light);
Metadata.AddCategory(PointLightBase.PositionProperty, Category_Light);
Metadata.AddCategory(PointLightBase.QuadraticAttenuationProperty, Category_Light);
Metadata.AddCategory(PointLightBase.RangeProperty, Category_Light);
Metadata.AddCategory(Polygon.FillRuleProperty, Category_Appearance);
Metadata.AddCategory(Polygon.PointsProperty, Category_Appearance);
Metadata.AddCategory(Polyline.FillRuleProperty, Category_Appearance);
Metadata.AddCategory(Polyline.PointsProperty, Category_Appearance);
Metadata.AddCategory(Popup.CustomPopupPlacementCallbackProperty, Category_Misc);
Metadata.AddCategory(Popup.HasDropShadowProperty, Category_Appearance);
Metadata.AddCategory(Popup.HorizontalOffsetProperty, Category_Layout);
Metadata.AddCategory(Popup.IsOpenProperty, Category_Common_Properties);
Metadata.AddCategory(Popup.PlacementProperty, Category_Layout);
Metadata.AddCategory(Popup.PlacementRectangleProperty, Category_Misc);
Metadata.AddCategory(Popup.PlacementTargetProperty, Category_Misc);
Metadata.AddCategory(Popup.StaysOpenProperty, Category_Common_Properties);
Metadata.AddCategory(Popup.VerticalOffsetProperty, Category_Layout);
Metadata.AddCategory(ProgressBar.IsIndeterminateProperty, Category_Common_Properties);
Metadata.AddCategory(ProgressBar.OrientationProperty, Category_Common_Properties);
Metadata.AddCategory(ProjectionCamera.FarPlaneDistanceProperty, Category_Camera);
Metadata.AddCategory(ProjectionCamera.LookDirectionProperty, Category_Camera);
Metadata.AddCategory(ProjectionCamera.NearPlaneDistanceProperty, Category_Camera);
Metadata.AddCategory(ProjectionCamera.PositionProperty, Category_Camera);
Metadata.AddCategory(ProjectionCamera.UpDirectionProperty, Category_Camera);
Metadata.AddCategory(RadialGradientBrush.CenterProperty, Category_Layout);
Metadata.AddCategory(RadioButton.GroupNameProperty, Category_Common_Properties);
Metadata.AddCategory(RangeBase.LargeChangeProperty, Category_Common_Properties);
Metadata.AddCategory(RangeBase.MaximumProperty, Category_Common_Properties);
Metadata.AddCategory(RangeBase.MinimumProperty, Category_Common_Properties);
Metadata.AddCategory(RangeBase.SmallChangeProperty, Category_Common_Properties);
Metadata.AddCategory(RangeBase.ValueProperty, Category_Common_Properties);
Metadata.AddCategory(Rectangle.RadiusXProperty, Category_Appearance);
Metadata.AddCategory(Rectangle.RadiusYProperty, Category_Appearance);
Metadata.AddCategory(RotateTransform.AngleProperty, Category_Transform);
Metadata.AddCategory(RotateTransform.CenterXProperty, Category_Transform);
Metadata.AddCategory(RotateTransform.CenterYProperty, Category_Transform);
Metadata.AddCategory(RowDefinition.HeightProperty, Category_Layout);
Metadata.AddCategory(RowDefinition.MaxHeightProperty, Category_Layout);
Metadata.AddCategory(RowDefinition.MinHeightProperty, Category_Layout);
Metadata.AddCategory(ScrollBar.OrientationProperty, Category_Layout);
Metadata.AddCategory(ScrollViewer.CanContentScrollProperty, Category_Layout);
Metadata.AddCategory(ScrollViewer.ComputedHorizontalScrollBarVisibilityProperty, Category_Appearance);
Metadata.AddCategory(ScrollViewer.ComputedVerticalScrollBarVisibilityProperty, Category_Appearance);
Metadata.AddCategory(ScrollViewer.ExtentHeightProperty, Category_Layout);
Metadata.AddCategory(ScrollViewer.ExtentWidthProperty, Category_Layout);
Metadata.AddCategory(ScrollViewer.HorizontalOffsetProperty, Category_Layout);
Metadata.AddCategory(ScrollViewer.HorizontalScrollBarVisibilityProperty, Category_Layout);
Metadata.AddCategory(ScrollViewer.ScrollableHeightProperty, Category_Layout);
Metadata.AddCategory(ScrollViewer.ScrollableWidthProperty, Category_Layout);
Metadata.AddCategory(ScrollViewer.VerticalOffsetProperty, Category_Layout);
Metadata.AddCategory(ScrollViewer.VerticalScrollBarVisibilityProperty, Category_Layout);
Metadata.AddCategory(ScrollViewer.ViewportHeightProperty, Category_Layout);
Metadata.AddCategory(ScrollViewer.ViewportWidthProperty, Category_Layout);
Metadata.AddCategory(Selector.IsSynchronizedWithCurrentItemProperty, Category_Common_Properties);
Metadata.AddCategory(Selector.SelectedIndexProperty, Category_Common_Properties);
Metadata.AddCategory(Selector.SelectedItemProperty, Category_Common_Properties);
Metadata.AddCategory(Selector.SelectedValuePathProperty, Category_Common_Properties);
Metadata.AddCategory(Selector.SelectedValueProperty, Category_Common_Properties);
Metadata.AddCategory(Shape.FillProperty, Category_Brushes);
Metadata.AddCategory(Shape.StretchProperty, Category_Appearance);
Metadata.AddCategory(Shape.StrokeDashArrayProperty, Category_Appearance);
Metadata.AddCategory(Shape.StrokeDashCapProperty, Category_Appearance);
Metadata.AddCategory(Shape.StrokeDashOffsetProperty, Category_Appearance);
Metadata.AddCategory(Shape.StrokeEndLineCapProperty, Category_Appearance);
Metadata.AddCategory(Shape.StrokeLineJoinProperty, Category_Appearance);
Metadata.AddCategory(Shape.StrokeMiterLimitProperty, Category_Appearance);
Metadata.AddCategory(Shape.StrokeProperty, Category_Brushes);
Metadata.AddCategory(Shape.StrokeStartLineCapProperty, Category_Appearance);
Metadata.AddCategory(Shape.StrokeThicknessProperty, Category_Appearance);
Metadata.AddCategory(SkewTransform.AngleXProperty, Category_Transform);
Metadata.AddCategory(SkewTransform.AngleYProperty, Category_Transform);
Metadata.AddCategory(SkewTransform.CenterXProperty, Category_Transform);
Metadata.AddCategory(SkewTransform.CenterYProperty, Category_Transform);
Metadata.AddCategory(Slider.AutoToolTipPlacementProperty, Category_Common_Properties);
Metadata.AddCategory(Slider.AutoToolTipPrecisionProperty, Category_Common_Properties);
Metadata.AddCategory(Slider.IsDirectionReversedProperty, Category_Common_Properties);
Metadata.AddCategory(Slider.IsMoveToPointEnabledProperty, Category_Common_Properties);
Metadata.AddCategory(Slider.IsSelectionRangeEnabledProperty, Category_Common_Properties);
Metadata.AddCategory(Slider.IsSnapToTickEnabledProperty, Category_Common_Properties);
Metadata.AddCategory(Slider.OrientationProperty, Category_Common_Properties);
Metadata.AddCategory(Slider.SelectionEndProperty, Category_Common_Properties);
Metadata.AddCategory(Slider.SelectionStartProperty, Category_Common_Properties);
Metadata.AddCategory(Slider.TickFrequencyProperty, Category_Common_Properties);
Metadata.AddCategory(Slider.TickPlacementProperty, Category_Common_Properties);
Metadata.AddCategory(Slider.TicksProperty, Category_Common_Properties);
Metadata.AddCategory(SolidColorBrush.ColorProperty, Category_Appearance);
Metadata.AddCategory(SpecularMaterial.BrushProperty, Category_Appearance);
Metadata.AddCategory(SpotLight.DirectionProperty, Category_Light);
Metadata.AddCategory(SpotLight.InnerConeAngleProperty, Category_Light);
Metadata.AddCategory(SpotLight.OuterConeAngleProperty, Category_Light);
Metadata.AddCategory(StackPanel.OrientationProperty, Category_Layout);
Metadata.AddCategory(StickyNoteControl.CaptionFontFamilyProperty, Category_Text);
Metadata.AddCategory(StickyNoteControl.CaptionFontSizeProperty, Category_Text);
Metadata.AddCategory(StickyNoteControl.CaptionFontStretchProperty, Category_Text);
Metadata.AddCategory(StickyNoteControl.CaptionFontStyleProperty, Category_Text);
Metadata.AddCategory(StickyNoteControl.CaptionFontWeightProperty, Category_Text);
Metadata.AddCategory(TabControl.ContentTemplateProperty, Category_Misc);
Metadata.AddCategory(TabControl.ContentTemplateSelectorProperty, Category_Misc);
Metadata.AddCategory(TabControl.SelectedContentTemplateProperty, Category_Misc);
Metadata.AddCategory(TabControl.SelectedContentTemplateSelectorProperty, Category_Misc);
Metadata.AddCategory(TabControl.TabStripPlacementProperty, Category_Common_Properties);
Metadata.AddCategory(Table.CellSpacingProperty, Category_Layout);
Metadata.AddCategory(TableCell.ColumnSpanProperty, Category_Layout);
Metadata.AddCategory(TableColumn.WidthProperty, Category_Layout);
Metadata.AddCategory(TextBlock.TextProperty, Category_Common_Properties);
Metadata.AddCategory(TextBlock.TextTrimmingProperty, Category_Text);
Metadata.AddCategory(TextBlock.TextWrappingProperty, Category_Text);
Metadata.AddCategory(TextBox.CharacterCasingProperty, Category_Text);
Metadata.AddCategory(TextBox.MaxLengthProperty, Category_Text);
Metadata.AddCategory(TextBox.MaxLinesProperty, Category_Text);
Metadata.AddCategory(TextBox.MinLinesProperty, Category_Text);
Metadata.AddCategory(TextBox.TextProperty, Category_Common_Properties);
Metadata.AddCategory(TextBoxBase.AcceptsTabProperty, Category_Text);
Metadata.AddCategory(TextBoxBase.AutoWordSelectionProperty, Category_Text);
Metadata.AddCategory(TextBoxBase.IsUndoEnabledProperty, Category_Text);
Metadata.AddCategory(TextEffect.ClipProperty, Category_Appearance);
Metadata.AddCategory(TextEffect.ForegroundProperty, Category_Appearance);
Metadata.AddCategory(TextElement.BackgroundProperty, Category_Brushes);
Metadata.AddCategory(TextElement.FontFamilyProperty, Category_Text);
Metadata.AddCategory(TextElement.FontSizeProperty, Category_Text);
Metadata.AddCategory(TextElement.FontStretchProperty, Category_Text);
Metadata.AddCategory(TextElement.FontStyleProperty, Category_Text);
Metadata.AddCategory(TextElement.FontWeightProperty, Category_Text);
Metadata.AddCategory(TextElement.ForegroundProperty, Category_Brushes);
Metadata.AddCategory(TextElement.TextEffectsProperty, Category_Text);
Metadata.AddCategory(TickBar.FillProperty, Category_Appearance);
Metadata.AddCategory(TileBrush.AlignmentXProperty, Category_Layout);
Metadata.AddCategory(TileBrush.AlignmentYProperty, Category_Layout);
Metadata.AddCategory(ToggleButton.IsCheckedProperty, Category_Common_Properties);
Metadata.AddCategory(ToggleButton.IsThreeStateProperty, Category_Common_Properties);
Metadata.AddCategory(TransformGroup.ChildrenProperty, Category_Transform);
Metadata.AddCategory(TranslateTransform.XProperty, Category_Layout);
Metadata.AddCategory(TranslateTransform.YProperty, Category_Layout);
Metadata.AddCategory(TreeViewItem.IsSelectedProperty, Category_Common_Properties);
Metadata.AddCategory(UIElement.BitmapEffectInputProperty, Category_Appearance);
Metadata.AddCategory(UIElement.BitmapEffectProperty, Category_Appearance);
Metadata.AddCategory(UIElement.ClipToBoundsProperty, Category_Appearance);
Metadata.AddCategory(UIElement.FocusableProperty, Category_Common_Properties);
Metadata.AddCategory(UIElement.IsEnabledProperty, Category_Common_Properties);
Metadata.AddCategory(UIElement.IsFocusedProperty, Category_Common_Properties);
Metadata.AddCategory(UIElement.IsHitTestVisibleProperty, Category_Common_Properties);
Metadata.AddCategory(UIElement.IsKeyboardFocusedProperty, Category_Common_Properties);
Metadata.AddCategory(UIElement.IsMouseOverProperty, Category_Common_Properties);
Metadata.AddCategory(UIElement.IsStylusDirectlyOverProperty, Category_Common_Properties);
Metadata.AddCategory(UIElement.OpacityMaskProperty, Category_Brushes);
Metadata.AddCategory(UIElement.OpacityProperty, Category_Appearance);
Metadata.AddCategory(UIElement.RenderTransformProperty, Category_Transform);
Metadata.AddCategory(UIElement.SnapsToDevicePixelsProperty, Category_Appearance);
Metadata.AddCategory(UIElement.VisibilityProperty, Category_Appearance);
Metadata.AddCategory(UniformGrid.ColumnsProperty, Category_Common_Properties);
Metadata.AddCategory(UniformGrid.RowsProperty, Category_Common_Properties);
Metadata.AddCategory(Viewbox.StretchDirectionProperty, Category_Appearance);
Metadata.AddCategory(Viewbox.StretchProperty, Category_Appearance);
Metadata.AddCategory(VirtualizingStackPanel.OrientationProperty, Category_Layout);
Metadata.AddCategory(Window.AllowsTransparencyProperty, Category_Appearance);
Metadata.AddCategory(Window.IconProperty, Category_Common_Properties);
Metadata.AddCategory(Window.ResizeModeProperty, Category_Common_Properties);
Metadata.AddCategory(Window.ShowInTaskbarProperty, Category_Common_Properties);
Metadata.AddCategory(Window.SizeToContentProperty, Category_Common_Properties);
Metadata.AddCategory(Window.TitleProperty, Category_Common_Properties);
Metadata.AddCategory(Window.TopmostProperty, Category_Common_Properties);
Metadata.AddCategory(Window.WindowStateProperty, Category_Common_Properties);
Metadata.AddCategory(Window.WindowStyleProperty, Category_Appearance);
Metadata.AddCategory(WrapPanel.ItemHeightProperty, Category_Layout);
Metadata.AddCategory(WrapPanel.ItemWidthProperty, Category_Layout);
Metadata.AddPopularProperty(Line.Y2Property);
Metadata.AddPopularProperty(NavigationWindow.ShowsNavigationUIProperty);
Metadata.AddPopularProperty(FlowDocumentScrollViewer.DocumentProperty);
Metadata.AddPopularProperty(GridViewRowPresenterBase.ColumnsProperty);
Metadata.AddPopularProperty(ListView.ViewProperty);
Metadata.AddPopularProperty(DocumentPageView.PageNumberProperty);
Metadata.AddPopularProperty(Popup.PlacementProperty);
Metadata.AddPopularProperty(Popup.PopupAnimationProperty);
Metadata.AddPopularProperty(ScrollBar.ViewportSizeProperty);
Metadata.AddPopularProperty(UniformGrid.RowsProperty);
Metadata.AddPopularProperty(TabControl.TabStripPlacementProperty);
Metadata.AddPopularProperty(Line.X1Property);
Metadata.AddPopularProperty(Line.Y1Property);
Metadata.AddPopularProperty(Line.X2Property);
Metadata.AddPopularProperty(Polygon.PointsProperty);
Metadata.AddPopularProperty(Polyline.PointsProperty);
Metadata.AddPopularProperty(Path.DataProperty);
Metadata.AddPopularProperty(HeaderedContentControl.HeaderProperty);
Metadata.AddPopularProperty(MediaElement.UnloadedBehaviorProperty);
Metadata.AddPopularProperty(Shape.FillProperty);
Metadata.AddPopularProperty(Page.TitleProperty);
Metadata.AddPopularProperty(ItemsControl.ItemsSourceProperty);
Metadata.AddPopularProperty(Image.SourceProperty);
Metadata.AddPopularProperty(TextBlock.TextProperty);
Metadata.AddPopularProperty(DockPanel.LastChildFillProperty);
Metadata.AddPopularProperty(Expander.IsExpandedProperty);
Metadata.AddPopularProperty(Shape.StrokeProperty);
Metadata.AddPopularProperty(RangeBase.ValueProperty);
Metadata.AddPopularProperty(ItemsControl.ItemContainerStyleProperty);
Metadata.AddPopularProperty(ToggleButton.IsCheckedProperty);
Metadata.AddPopularProperty(Window.TitleProperty);
Metadata.AddPopularProperty(Viewport3DVisual.CameraProperty);
Metadata.AddPopularProperty(Frame.SourceProperty);
Metadata.AddPopularProperty(Rectangle.RadiusXProperty);
Metadata.AddPopularProperty(Rectangle.RadiusYProperty);
Metadata.AddPopularProperty(FrameworkElement.HeightProperty);
Metadata.AddPopularProperty(FrameworkElement.WidthProperty);
Metadata.AddPopularProperty(UniformGrid.ColumnsProperty);
Metadata.AddPopularProperty(RangeBase.MinimumProperty);
Metadata.AddPopularProperty(RangeBase.MaximumProperty);
Metadata.AddPopularProperty(ScrollBar.OrientationProperty);
Metadata.AddPopularProperty(ContentControl.ContentProperty);
Metadata.AddPopularProperty(Popup.IsOpenProperty);
Metadata.AddPopularProperty(TextElement.FontSizeProperty);
Metadata.AddPopularProperty(FrameworkElement.NameProperty);
Metadata.AddPopularProperty(Popup.HorizontalOffsetProperty);
Metadata.AddPopularProperty(Popup.VerticalOffsetProperty);
Metadata.AddPopularProperty(Window.WindowStyleProperty);
Metadata.AddPopularProperty(Shape.StrokeThicknessProperty);
Metadata.AddPopularProperty(TextElement.ForegroundProperty);
Metadata.AddPopularProperty(FrameworkElement.VerticalAlignmentProperty);
Metadata.AddPopularProperty(Button.IsDefaultProperty);
Metadata.AddPopularProperty(UIElement.RenderTransformOriginProperty);
Metadata.AddPopularProperty(TextElement.FontFamilyProperty);
Metadata.AddPopularProperty(FrameworkElement.HorizontalAlignmentProperty);
Metadata.AddPopularProperty(ToolBar.BandProperty);
Metadata.AddPopularProperty(ToolBar.BandIndexProperty);
Metadata.AddPopularProperty(ItemsControl.ItemTemplateProperty);
Metadata.AddPopularProperty(TextBlock.TextWrappingProperty);
Metadata.AddPopularProperty(FrameworkElement.MarginProperty);
Metadata.AddPopularProperty(RangeBase.LargeChangeProperty);
Metadata.AddPopularProperty(RangeBase.SmallChangeProperty);
Metadata.AddPopularProperty(Panel.BackgroundProperty);
Metadata.AddPopularProperty(Shape.StrokeMiterLimitProperty);
Metadata.AddPopularProperty(TextElement.FontWeightProperty);
Metadata.AddPopularProperty(StackPanel.OrientationProperty);
Metadata.AddPopularProperty(ListBox.SelectionModeProperty);
Metadata.AddPopularProperty(FrameworkElement.StyleProperty);
Metadata.AddPopularProperty(TextBox.TextProperty);
Metadata.AddPopularProperty(Window.SizeToContentProperty);
Metadata.AddPopularProperty(Window.ResizeModeProperty);
Metadata.AddPopularProperty(TextBlock.TextTrimmingProperty);
Metadata.AddPopularProperty(Window.ShowInTaskbarProperty);
Metadata.AddPopularProperty(Window.IconProperty);
Metadata.AddPopularProperty(UIElement.RenderTransformProperty);
Metadata.AddPopularProperty(Button.IsCancelProperty);
Metadata.AddPopularProperty(Border.BorderBrushProperty);
Metadata.AddPopularProperty(Block.TextAlignmentProperty);
Metadata.AddPopularProperty(Border.CornerRadiusProperty);
Metadata.AddPopularProperty(Border.BorderThicknessProperty);
Metadata.AddPopularProperty(TreeViewItem.IsSelectedProperty);
Metadata.AddPopularProperty(Border.PaddingProperty);
Metadata.AddPopularProperty(Shape.StretchProperty);
Metadata.AddAdvancedProperty(Block.BreakColumnBeforeProperty);
Metadata.AddAdvancedProperty(Block.BreakPageBeforeProperty);
Metadata.AddAdvancedProperty(Block.PaddingProperty);
Metadata.AddAdvancedProperty(ColumnDefinition.MaxWidthProperty);
Metadata.AddAdvancedProperty(ColumnDefinition.MinWidthProperty);
Metadata.AddAdvancedProperty(ComboBox.StaysOpenOnEditProperty);
Metadata.AddAdvancedProperty(ComboBox.TextProperty);
Metadata.AddAdvancedProperty(Control.HorizontalContentAlignmentProperty);
Metadata.AddAdvancedProperty(Control.PaddingProperty);
Metadata.AddAdvancedProperty(Control.VerticalContentAlignmentProperty);
Metadata.AddAdvancedProperty(DashStyle.DashesProperty);
Metadata.AddAdvancedProperty(DocumentViewer.ExtentHeightProperty);
Metadata.AddAdvancedProperty(DocumentViewer.ExtentWidthProperty);
Metadata.AddAdvancedProperty(DocumentViewer.HorizontalOffsetProperty);
Metadata.AddAdvancedProperty(DocumentViewer.HorizontalPageSpacingProperty);
Metadata.AddAdvancedProperty(DocumentViewer.ViewportHeightProperty);
Metadata.AddAdvancedProperty(DocumentViewer.ViewportWidthProperty);
Metadata.AddAdvancedProperty(DrawingGroup.ClipGeometryProperty);
Metadata.AddAdvancedProperty(Figure.CanDelayPlacementProperty);
Metadata.AddAdvancedProperty(Figure.HorizontalAnchorProperty);
Metadata.AddAdvancedProperty(Figure.HorizontalOffsetProperty);
Metadata.AddAdvancedProperty(Figure.VerticalAnchorProperty);
Metadata.AddAdvancedProperty(Figure.VerticalOffsetProperty);
Metadata.AddAdvancedProperty(FlowDocument.ColumnGapProperty);
Metadata.AddAdvancedProperty(FlowDocument.ColumnRuleBrushProperty);
Metadata.AddAdvancedProperty(FlowDocument.ColumnRuleWidthProperty);
Metadata.AddAdvancedProperty(FlowDocument.ColumnWidthProperty);
Metadata.AddAdvancedProperty(FlowDocument.IsColumnWidthFlexibleProperty);
Metadata.AddAdvancedProperty(FormatConvertedBitmap.AlphaThresholdProperty);
Metadata.AddAdvancedProperty(FrameworkElement.ActualHeightProperty);
Metadata.AddAdvancedProperty(FrameworkElement.ActualWidthProperty);
Metadata.AddAdvancedProperty(FrameworkElement.LayoutTransformProperty);
Metadata.AddAdvancedProperty(FrameworkElement.MaxHeightProperty);
Metadata.AddAdvancedProperty(FrameworkElement.MaxWidthProperty);
Metadata.AddAdvancedProperty(FrameworkElement.MinHeightProperty);
Metadata.AddAdvancedProperty(FrameworkElement.MinWidthProperty);
Metadata.AddAdvancedProperty(FrameworkElement.TagProperty);
Metadata.AddAdvancedProperty(GeometryGroup.FillRuleProperty);
Metadata.AddAdvancedProperty(Glyphs.FontRenderingEmSizeProperty);
Metadata.AddAdvancedProperty(Glyphs.FontUriProperty);
Metadata.AddAdvancedProperty(Grid.IsSharedSizeScopeProperty);
Metadata.AddAdvancedProperty(Grid.ShowGridLinesProperty);
Metadata.AddAdvancedProperty(ItemsControl.DisplayMemberPathProperty);
Metadata.AddAdvancedProperty(ItemsControl.IsTextSearchEnabledProperty);
Metadata.AddAdvancedProperty(MediaElement.LoadedBehaviorProperty);
Metadata.AddAdvancedProperty(MediaElement.ScrubbingEnabledProperty);
Metadata.AddAdvancedProperty(MediaElement.UnloadedBehaviorProperty);
Metadata.AddAdvancedProperty(PasswordBox.PasswordCharProperty);
Metadata.AddAdvancedProperty(PathGeometry.FillRuleProperty);
Metadata.AddAdvancedProperty(PathSegment.IsStrokedProperty);
Metadata.AddAdvancedProperty(Pen.DashCapProperty);
Metadata.AddAdvancedProperty(Pen.DashStyleProperty);
Metadata.AddAdvancedProperty(RowDefinition.MaxHeightProperty);
Metadata.AddAdvancedProperty(RowDefinition.MinHeightProperty);
Metadata.AddAdvancedProperty(ScrollViewer.CanContentScrollProperty);
Metadata.AddAdvancedProperty(ScrollViewer.CanContentScrollProperty);
Metadata.AddAdvancedProperty(ScrollViewer.ComputedHorizontalScrollBarVisibilityProperty);
Metadata.AddAdvancedProperty(ScrollViewer.ComputedVerticalScrollBarVisibilityProperty);
Metadata.AddAdvancedProperty(ScrollViewer.ExtentHeightProperty);
Metadata.AddAdvancedProperty(ScrollViewer.ExtentWidthProperty);
Metadata.AddAdvancedProperty(ScrollViewer.HorizontalOffsetProperty);
Metadata.AddAdvancedProperty(ScrollViewer.HorizontalScrollBarVisibilityProperty);
Metadata.AddAdvancedProperty(ScrollViewer.ScrollableHeightProperty);
Metadata.AddAdvancedProperty(ScrollViewer.ScrollableWidthProperty);
Metadata.AddAdvancedProperty(ScrollViewer.VerticalOffsetProperty);
Metadata.AddAdvancedProperty(ScrollViewer.VerticalScrollBarVisibilityProperty);
Metadata.AddAdvancedProperty(ScrollViewer.ViewportHeightProperty);
Metadata.AddAdvancedProperty(ScrollViewer.ViewportWidthProperty);
Metadata.AddAdvancedProperty(Selector.SelectedItemProperty);
Metadata.AddAdvancedProperty(Selector.SelectedValuePathProperty);
Metadata.AddAdvancedProperty(Selector.SelectedValueProperty);
Metadata.AddAdvancedProperty(Shape.StretchProperty);
Metadata.AddAdvancedProperty(Shape.StrokeDashArrayProperty);
Metadata.AddAdvancedProperty(Shape.StrokeDashCapProperty);
Metadata.AddAdvancedProperty(Shape.StrokeDashOffsetProperty);
Metadata.AddAdvancedProperty(Shape.StrokeEndLineCapProperty);
Metadata.AddAdvancedProperty(Shape.StrokeLineJoinProperty);
Metadata.AddAdvancedProperty(Shape.StrokeMiterLimitProperty);
Metadata.AddAdvancedProperty(Shape.StrokeStartLineCapProperty);
Metadata.AddAdvancedProperty(SkewTransform.CenterXProperty);
Metadata.AddAdvancedProperty(SkewTransform.CenterYProperty);
Metadata.AddAdvancedProperty(Slider.AutoToolTipPrecisionProperty);
Metadata.AddAdvancedProperty(Slider.IsMoveToPointEnabledProperty);
Metadata.AddAdvancedProperty(Slider.IsSelectionRangeEnabledProperty);
Metadata.AddAdvancedProperty(Slider.IsSnapToTickEnabledProperty);
Metadata.AddAdvancedProperty(Slider.SelectionEndProperty);
Metadata.AddAdvancedProperty(Slider.SelectionStartProperty);
Metadata.AddAdvancedProperty(Slider.TicksProperty);
Metadata.AddAdvancedProperty(TextBlock.TextTrimmingProperty);
Metadata.AddAdvancedProperty(TextBlock.TextWrappingProperty);
Metadata.AddAdvancedProperty(TextBox.CharacterCasingProperty);
Metadata.AddAdvancedProperty(TextBox.MaxLengthProperty);
Metadata.AddAdvancedProperty(TextBox.MaxLinesProperty);
Metadata.AddAdvancedProperty(TextBox.MinLinesProperty);
Metadata.AddAdvancedProperty(TextBoxBase.AcceptsTabProperty);
Metadata.AddAdvancedProperty(TextBoxBase.AutoWordSelectionProperty);
Metadata.AddAdvancedProperty(TextBoxBase.IsUndoEnabledProperty);
Metadata.AddAdvancedProperty(TextEffect.ClipProperty);
Metadata.AddAdvancedProperty(TextElement.FontStretchProperty);
Metadata.AddAdvancedProperty(TextElement.FontStyleProperty);
Metadata.AddAdvancedProperty(TextElement.FontWeightProperty);
Metadata.AddAdvancedProperty(TextElement.TextEffectsProperty);
Metadata.AddAdvancedProperty(UIElement.BitmapEffectInputProperty);
Metadata.AddAdvancedProperty(UIElement.BitmapEffectProperty);
Metadata.AddAdvancedProperty(UIElement.ClipToBoundsProperty);
Metadata.AddAdvancedProperty(UIElement.FocusableProperty);
Metadata.AddAdvancedProperty(UIElement.IsHitTestVisibleProperty);
Metadata.AddAdvancedProperty(UIElement.SnapsToDevicePixelsProperty);
Metadata.AddPopularProperty(typeof(Binding), "Path");
Metadata.AddPopularProperty(typeof(Binding), "Source");
Metadata.AddPopularProperty(typeof(Binding), "Mode");
Metadata.AddPopularProperty(typeof(Binding), "RelativeSource");
Metadata.AddPopularProperty(typeof(Binding), "ElementName");
Metadata.AddPopularProperty(typeof(Binding), "Converter");
Metadata.AddPopularProperty(typeof(Binding), "XPath");
Metadata.AddValueRange(Block.LineHeightProperty, double.Epsilon, double.MaxValue);
Metadata.AddValueRange(Canvas.BottomProperty, double.MinValue, double.MaxValue);
@ -542,26 +182,12 @@ namespace ICSharpCode.WpfDesign.Designer @@ -542,26 +182,12 @@ namespace ICSharpCode.WpfDesign.Designer
Metadata.AddValueRange(Timeline.DecelerationRatioProperty, 0, 1);
Metadata.AddValueRange(Timeline.AccelerationRatioProperty, 0, 1);
Metadata.AddValueRange(Track.ViewportSizeProperty, 0, double.PositiveInfinity);
Metadata.AddValueRange(UIElement.OpacityProperty, 0, 1);
Metadata.AddAdvancedProperty(typeof(Binding), "ValidationRules");
Metadata.AddAdvancedProperty(typeof(Binding), "ValidatesOnExceptions");
Metadata.AddAdvancedProperty(typeof(Binding), "ValidatesOnDataErrors");
Metadata.AddAdvancedProperty(typeof(Binding), "NotifyOnSourceUpdated");
Metadata.AddAdvancedProperty(typeof(Binding), "NotifyOnTargetUpdated");
Metadata.AddAdvancedProperty(typeof(Binding), "NotifyOnValidationError");
Metadata.AddAdvancedProperty(typeof(Binding), "ConverterParameter");
Metadata.AddAdvancedProperty(typeof(Binding), "ConverterCulture");
Metadata.AddAdvancedProperty(typeof(Binding), "Source");
Metadata.AddAdvancedProperty(typeof(Binding), "RelativeSource");
Metadata.AddAdvancedProperty(typeof(Binding), "IsAsync");
Metadata.AddAdvancedProperty(typeof(Binding), "AsyncState");
Metadata.AddAdvancedProperty(typeof(Binding), "BindsDirectlyToSource");
Metadata.AddAdvancedProperty(typeof(Binding), "UpdateSourceExceptionFilter");
Metadata.AddAdvancedProperty(typeof(BindingBase), "FallbackValue");
Metadata.AddAdvancedProperty(typeof(BindingBase), "StringFormat");
Metadata.AddAdvancedProperty(typeof(BindingBase), "TargetNullValue");
Metadata.HideProperty(typeof(UIElement), "RenderSize");
Metadata.HideProperty(FrameworkElement.NameProperty);
Metadata.HideProperty(typeof(FrameworkElement), "Resources");
Metadata.HideProperty(typeof(Window), "Owner");
//Metadata.DisablePlacement(typeof(Button));
}

1
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/NumericUpDown.xaml

@ -125,6 +125,7 @@ @@ -125,6 +125,7 @@
<TextBox x:Name="PART_TextBox"
BorderThickness="0"
Background="{x:Null}"
Foreground="{TemplateBinding Foreground}"
Grid.RowSpan="2" />
<Controls:DragRepeatButton x:Name="PART_UpButton"
Style="{StaticResource UpButton}"

16
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Converters.cs

@ -116,4 +116,20 @@ namespace ICSharpCode.WpfDesign.Designer.Converters @@ -116,4 +116,20 @@ namespace ICSharpCode.WpfDesign.Designer.Converters
throw new NotImplementedException();
}
}
// Boxed int throw exception without converter (wpf bug?)
public class DummyConverter : IValueConverter
{
public static DummyConverter Instance = new DummyConverter();
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
}

2
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/ExtensionMethods.cs

@ -51,6 +51,6 @@ namespace ICSharpCode.WpfDesign.Designer @@ -51,6 +51,6 @@ namespace ICSharpCode.WpfDesign.Designer
if (result != null) return result;
}
return null;
}
}
}
}

1
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/SnaplinePlacementBehavior.cs

@ -67,7 +67,6 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions @@ -67,7 +67,6 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions
var horizontalInput = new List<Snapline>();
var verticalInput = new List<Snapline>();
var info = operation.PlacedItems[0];
var snapping = !Keyboard.IsKeyDown(Key.LeftCtrl);
if (operation.Type == PlacementType.Resize) {
AddLines(bounds, 0, false, horizontalInput, verticalInput, info.ResizeThumbAlignment);

17
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Editors/NumberEditor.xaml

@ -1,10 +1,9 @@ @@ -1,10 +1,9 @@
<Controls:NumericUpDown
x:Class="ICSharpCode.WpfDesign.Designer.PropertyGrid.Editors.NumberEditor"
xmlns="http://schemas.microsoft.com/netfx/2007/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Controls="clr-namespace:ICSharpCode.WpfDesign.Designer.Controls"
BorderThickness="0"
Background="{x:Null}"
Value="{Binding Value}"
>
<Controls:NumericUpDown x:Class="ICSharpCode.WpfDesign.Designer.PropertyGrid.Editors.NumberEditor"
xmlns="http://schemas.microsoft.com/netfx/2007/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Controls="clr-namespace:ICSharpCode.WpfDesign.Designer.Controls"
xmlns:Converters="clr-namespace:ICSharpCode.WpfDesign.Designer.Converters"
BorderThickness="0"
Background="{x:Null}"
Value="{Binding Value, Converter={x:Static Converters:DummyConverter.Instance}}">
</Controls:NumericUpDown>

173
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGrid.cs

@ -8,43 +8,31 @@ using System.Threading; @@ -8,43 +8,31 @@ using System.Threading;
using System.Globalization;
using ICSharpCode.WpfDesign.PropertyGrid;
using System.Windows.Threading;
using System.Diagnostics;
namespace ICSharpCode.WpfDesign.Designer.PropertyGrid
{
public enum PropertyGridTab
{
Properties,
Events
}
public class PropertyGrid : INotifyPropertyChanged
{
public PropertyGrid()
{
Categories = new ObservableCollection<Category>();
Events = new ObservableCollection<PropertyNode>();
Categories = new ObservableCollection<Category>(new [] {
specialCategory,
popularCategory,
otherCategory
});
Events = new PropertyNodeCollection();
}
static SortedDictionary<string, Category> allCategories =
new SortedDictionary<string, Category>(CategoryNameComparer.Instance);
Category specialCategory = new Category("Special");
Category popularCategory = new Category("Popular");
Category otherCategory = new Category("Other");
class CategoryNameComparer : IComparer<string>
{
public static CategoryNameComparer Instance = new CategoryNameComparer();
public int Compare(string x, string y)
{
int i1 = Array.IndexOf(Metadata.CategoryOrder, x);
if (i1 == -1) i1 = int.MaxValue;
int i2 = Array.IndexOf(Metadata.CategoryOrder, y);
if (i2 == -1) i2 = int.MaxValue;
if (i1 == i2) return x.CompareTo(y);
return i1.CompareTo(i2);
}
}
Dictionary<MemberDescriptor, PropertyNode> nodeFromDescriptor = new Dictionary<MemberDescriptor, PropertyNode>();
public ObservableCollection<Category> Categories { get; private set; }
public ObservableCollection<PropertyNode> Events { get; private set; }
public PropertyNodeCollection Events { get; private set; }
PropertyGridTab currentTab;
@ -90,7 +78,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid @@ -90,7 +78,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid
return selectedItems;
}
set {
Dispatcher.CurrentDispatcher.BeginInvoke(new Action(delegate {
Dispatcher.CurrentDispatcher.BeginInvoke(new Action(delegate {
selectedItems = value;
Reload();
RaisePropertyChanged("SelectedItems");
@ -105,75 +93,51 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid @@ -105,75 +93,51 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid
void Reload()
{
Categories.Clear();
Events.Clear();
SingleItem = null;
Clear();
if (SelectedItems == null || SelectedItems.Count() == 0) return;
if (SelectedItems.Count() == 1) SingleItem = SelectedItems.First();
foreach (var md in GetDescriptors()) {
if (PassesFilter(md.Name))
AddNode(md);
}
}
foreach (var cat in allCategories.Values) {
cat.Properties.Clear();
cat.MoreProperties.Clear();
void Clear()
{
foreach (var c in Categories) {
c.IsVisible = false;
foreach (var p in c.Properties) {
p.IsVisible = false;
}
}
if (SelectedItems == null || SelectedItems.Count() == 0) return;
foreach (var e in Events) {
e.IsVisible = false;
}
SingleItem = null;
}
List<MemberDescriptor> GetDescriptors()
{
List<MemberDescriptor> list = new List<MemberDescriptor>();
if (SelectedItems.Count() == 1) {
SingleItem = SelectedItems.First();
foreach (MemberDescriptor d in TypeHelper.GetAvailableProperties(SingleItem.ComponentType)) {
list.Add(d);
}
foreach (MemberDescriptor d in TypeHelper.GetAvailableEvents(SingleItem.ComponentType)) {
list.Add(d);
}
}
else {
} else {
foreach (MemberDescriptor d in TypeHelper.GetCommonAvailableProperties(SelectedItems.Select(t => t.ComponentType))) {
list.Add(d);
}
}
var nodeList = list
.Where(d => PassesFilter(d.Name))
.OrderBy(d => d.Name)
.Select(d => new PropertyNode(SelectedItems.Select(t => t.Properties[d.Name]).ToArray()));
foreach (var node in nodeList) {
if (node.IsEvent) {
Events.Add(node);
}
else {
string catName = Metadata.GetCategory(node.FirstProperty) ?? BasicMetadata.Category_Misc;
Category cat;
if (!allCategories.TryGetValue(catName, out cat)) {
cat = new Category(catName);
allCategories[catName] = cat;
}
if (Metadata.IsAdvanced(node.FirstProperty)) {
cat.MoreProperties.Add(node);
}
else {
cat.Properties.Add(node);
}
}
}
foreach (var cat in allCategories.Values) {
if (cat.Properties.Count > 0 || cat.MoreProperties.Count > 0) {
if (string.IsNullOrEmpty(Filter)) {
if (cat.ShowMoreByFilter) {
cat.ShowMore = false;
cat.ShowMoreByFilter = false;
}
}
else {
cat.ShowMore = true;
cat.ShowMoreByFilter = true;
}
Categories.Add(cat);
}
}
return list;
}
bool PassesFilter(string name)
@ -189,6 +153,40 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid @@ -189,6 +153,40 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid
return false;
}
void AddNode(MemberDescriptor md)
{
var designProperties = SelectedItems.Select(item => item.Properties[md.Name]).ToArray();
if (!Metadata.IsBrowsable(designProperties[0])) return;
PropertyNode node;
if (nodeFromDescriptor.TryGetValue(md, out node)) {
node.Load(designProperties);
} else {
node = new PropertyNode();
node.Load(designProperties);
if (node.IsEvent) {
Events.AddSorted(node);
} else {
var cat = PickCategory(node);
cat.Properties.AddSorted(node);
node.Category = cat;
}
nodeFromDescriptor[md] = node;
}
node.IsVisible = true;
if (node.Category != null)
node.Category.IsVisible = true;
}
Category PickCategory(PropertyNode node)
{
if (Metadata.IsPopular(node.FirstProperty)) return popularCategory;
var typeName = node.FirstProperty.DeclaringType.FullName;
if (typeName.StartsWith("System.Windows.") || typeName.StartsWith("ICSharpCode.WpfDesign.Designer.Controls."))
return otherCategory;
return specialCategory;
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
@ -201,5 +199,26 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid @@ -201,5 +199,26 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid
}
#endregion
//class CategoryNameComparer : IComparer<string>
//{
// public static CategoryNameComparer Instance = new CategoryNameComparer();
// public int Compare(string x, string y)
// {
// int i1 = Array.IndexOf(Metadata.CategoryOrder, x);
// if (i1 == -1) i1 = int.MaxValue;
// int i2 = Array.IndexOf(Metadata.CategoryOrder, y);
// if (i2 == -1) i2 = int.MaxValue;
// if (i1 == i2) return x.CompareTo(y);
// return i1.CompareTo(i2);
// }
//}
}
public enum PropertyGridTab
{
Properties,
Events
}
}

31
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.xaml

@ -165,11 +165,13 @@ @@ -165,11 +165,13 @@
</Setter>
</Style>
<DataTemplate DataType="{x:Type PropertyGrid:Category}">
<DataTemplate DataType="{x:Type PropertyGridBase:Category}">
<Expander Header="{Binding Name}"
Style="{StaticResource CategoryExpanderStyle}"
IsExpanded="{Binding IsExpanded}">
<StackPanel>
IsExpanded="{Binding IsExpanded}"
Visibility="{Binding IsVisible, Converter={x:Static Converters:CollapsedWhenFalse.Instance}}">
<ItemsControl ItemsSource="{Binding Properties}" />
<!--<StackPanel>
<ItemsControl ItemsSource="{Binding Properties}" />
<Expander Visibility="{Binding MoreProperties.Count, Converter={x:Static Converters:CollapsedWhenZero.Instance}}"
Style="{StaticResource MoreExpanderStyle}"
@ -177,12 +179,12 @@ @@ -177,12 +179,12 @@
<ItemsControl ItemsSource="{Binding MoreProperties}"
Background="#F9F9F4" />
</Expander>
</StackPanel>
</StackPanel>-->
</Expander>
</DataTemplate>
<DataTemplate DataType="{x:Type PropertyGridBase:PropertyNode}">
<StackPanel>
<StackPanel Visibility="{Binding IsVisible, Converter={x:Static Converters:CollapsedWhenFalse.Instance}}">
<Border x:Name="uxPropertyNodeRow"
MinHeight="20"
BorderThickness="0 0 0 1"
@ -202,11 +204,13 @@ @@ -202,11 +204,13 @@
VerticalAlignment="Center"
Margin="7 0 0 0"
ToolTip="{Binding Description}"
FontWeight="{Binding FontWeight}" />
FontWeight="{Binding FontWeight}"
Foreground="{Binding NameForeground}" />
</DockPanel>
<Border BorderThickness="1 0 0 0"
BorderBrush="{x:Static SystemColors.ControlBrush}">
<ContentPresenter Content="{Binding Editor}"
<ContentPresenter x:Name="editorConatiner"
Content="{Binding Editor}"
VerticalAlignment="Center"
Margin="3 0" />
</Border>
@ -218,10 +222,21 @@ @@ -218,10 +222,21 @@
<Expander Visibility="{Binding MoreChildren.Count, Converter={x:Static Converters:CollapsedWhenZero.Instance}}"
Style="{StaticResource MoreExpanderStyle}">
<ItemsControl ItemsSource="{Binding MoreChildren}"
Background="#F9F9F4" />
Background="#F9F9F4"/>
</Expander>
</StackPanel>
</StackPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsEnabled}"
Value="False">
<Setter TargetName="editorConatiner"
Property="Opacity"
Value="0.5" />
<Setter TargetName="editorConatiner"
Property="IsHitTestVisible"
Value="False" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
<!--<DataTemplate DataType="{x:Type FontFamily}">

1
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/WpfDesign.Designer.csproj

@ -113,7 +113,6 @@ @@ -113,7 +113,6 @@
<Compile Include="Extensions\ResizeThumbExtension.cs" />
<Compile Include="Extensions\WindowResizeBehavior.cs" />
<Compile Include="BasicMetadata.cs" />
<Compile Include="PropertyGrid\Category.cs" />
<Compile Include="PropertyGrid\Editors\BoolEditor.xaml.cs">
<DependentUpon>BoolEditor.xaml</DependentUpon>
</Compile>

14
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Xaml/XamlModelProperty.cs

@ -94,8 +94,9 @@ namespace ICSharpCode.WpfDesign.Designer.Xaml @@ -94,8 +94,9 @@ namespace ICSharpCode.WpfDesign.Designer.Xaml
public override DesignItem Value {
get {
if (IsCollection)
throw new DesignerException("Cannot access Value for collection properties.");
// Binding...
//if (IsCollection)
// throw new DesignerException("Cannot access Value for collection properties.");
var xamlObject = _property.PropertyValue as XamlObject;
if (xamlObject != null) {
@ -129,6 +130,11 @@ namespace ICSharpCode.WpfDesign.Designer.Xaml @@ -129,6 +130,11 @@ namespace ICSharpCode.WpfDesign.Designer.Xaml
_property.ValueChanged -= value;
}
}
public override event EventHandler ValueOnInstanceChanged {
add { _property.ValueOnIstanceChanged += value; }
remove { _property.ValueOnIstanceChanged -= value; }
}
public override object ValueOnInstance {
get {
@ -138,7 +144,9 @@ namespace ICSharpCode.WpfDesign.Designer.Xaml @@ -138,7 +144,9 @@ namespace ICSharpCode.WpfDesign.Designer.Xaml
}
public override bool IsSet {
get { return _property.IsSet; }
get { if (_property.IsSet) {
}
return _property.IsSet; }
}
#if EventHandlerDebugging

23
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/XamlProperty.cs

@ -138,7 +138,9 @@ namespace ICSharpCode.WpfDesign.XamlDom @@ -138,7 +138,9 @@ namespace ICSharpCode.WpfDesign.XamlDom
/// Gets if the property is set.
/// </summary>
public bool IsSet {
get { return propertyValue != null || collectionElements != null; }
get { return propertyValue != null ||
_propertyElement != null; // collection
}
}
/// <summary>
@ -151,17 +153,27 @@ namespace ICSharpCode.WpfDesign.XamlDom @@ -151,17 +153,27 @@ namespace ICSharpCode.WpfDesign.XamlDom
/// </summary>
public event EventHandler ValueChanged;
//When ME evaluated PropertyValue dosn't changed but ValueOnIstance does.
public event EventHandler ValueOnIstanceChanged;
void SetPropertyValue(XamlPropertyValue value)
{
if (IsCollection) {
throw new InvalidOperationException("Cannot set the value of collection properties.");
}
// Binding...
//if (IsCollection) {
// throw new InvalidOperationException("Cannot set the value of collection properties.");
//}
bool wasSet = this.IsSet;
PossiblyNameChanged(propertyValue, value);
//reset expression
var xamlObject = propertyValue as XamlObject;
if (xamlObject != null && xamlObject.IsMarkupExtension)
propertyInfo.ResetValue(parentObject.Instance);
ResetInternal();
propertyValue = value;
propertyValue.ParentProperty = this;
propertyValue.AddNodeTo(this);
@ -174,6 +186,7 @@ namespace ICSharpCode.WpfDesign.XamlDom @@ -174,6 +186,7 @@ namespace ICSharpCode.WpfDesign.XamlDom
IsSetChanged(this, EventArgs.Empty);
}
}
if (ValueChanged != null) {
ValueChanged(this, EventArgs.Empty);
}
@ -358,6 +371,8 @@ namespace ICSharpCode.WpfDesign.XamlDom @@ -358,6 +371,8 @@ namespace ICSharpCode.WpfDesign.XamlDom
}
set {
propertyInfo.SetValue(parentObject.Instance, value);
if (ValueOnIstanceChanged != null)
ValueOnIstanceChanged(this, EventArgs.Empty);
}
}

2
src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/DesignItemProperty.cs

@ -74,6 +74,8 @@ namespace ICSharpCode.WpfDesign @@ -74,6 +74,8 @@ namespace ICSharpCode.WpfDesign
/// Is raised when the value of the property changes (by calling <see cref="SetValue"/> or <see cref="Reset"/>).
/// </summary>
public abstract event EventHandler ValueChanged;
public abstract event EventHandler ValueOnInstanceChanged;
/// <summary>
/// Gets/Sets the value of the property on the designed instance.

124
src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/Metadata.cs

@ -53,61 +53,113 @@ namespace ICSharpCode.WpfDesign @@ -53,61 +53,113 @@ namespace ICSharpCode.WpfDesign
return null;
}
static Dictionary<string, string> categories = new Dictionary<string, string>();
public static void AddCategory(DependencyProperty p, string category)
//static Dictionary<string, string> categories = new Dictionary<string, string>();
//public static void AddCategory(DependencyProperty p, string category)
//{
// lock (categories) {
// categories[p.GetFullName()] = category;
// }
//}
//public static void AddCategory(Type type, string property, string category)
//{
// lock (categories) {
// categories[type + "." + property] = category;
// }
//}
//public static string GetCategory(DesignItemProperty p)
//{
// string result;
// lock (categories) {
// if (categories.TryGetValue(p.DependencyFullName, out result)) {
// return result;
// }
// }
// return p.Category;
//}
//static HashSet<string> advancedProperties = new HashSet<string>();
//public static void AddAdvancedProperty(DependencyProperty p)
//{
// lock (advancedProperties) {
// advancedProperties.Add(p.GetFullName());
// }
//}
//public static void AddAdvancedProperty(Type type, string member)
//{
// lock (advancedProperties) {
// advancedProperties.Add(type.FullName + "." + member);
// }
//}
//public static bool IsAdvanced(DesignItemProperty p)
//{
// lock (advancedProperties) {
// if (advancedProperties.Contains(p.DependencyFullName)) {
// return true;
// }
// }
// return p.IsAdvanced;
//}
static HashSet<string> hiddenProperties = new HashSet<string>();
public static void HideProperty(DependencyProperty p)
{
lock (categories) {
categories[p.GetFullName()] = category;
}
lock (hiddenProperties) {
hiddenProperties.Add(p.GetFullName());
}
}
public static void AddCategory(Type type, string property, string category)
public static void HideProperty(Type type, string member)
{
lock (categories) {
categories[type + "." + property] = category;
}
lock (hiddenProperties) {
hiddenProperties.Add(type.FullName + "." + member);
}
}
public static string GetCategory(DesignItemProperty p)
public static bool IsBrowsable(DesignItemProperty p)
{
string result;
lock (categories) {
if (categories.TryGetValue(p.DependencyFullName, out result)) {
return result;
}
}
return p.Category;
lock (hiddenProperties) {
if (hiddenProperties.Contains(p.DependencyFullName)) {
return false;
}
}
return true;
}
static HashSet<string> advancedProperties = new HashSet<string>();
//public static string[] CategoryOrder { get; set; }
static HashSet<string> popularProperties = new HashSet<string>();
public static void AddAdvancedProperty(DependencyProperty p)
public static void AddPopularProperty(DependencyProperty p)
{
lock (advancedProperties) {
advancedProperties.Add(p.GetFullName());
}
lock (popularProperties) {
popularProperties.Add(p.GetFullName());
}
}
public static void AddAdvancedProperty(Type type, string member)
public static void AddPopularProperty(Type type, string member)
{
lock (advancedProperties) {
advancedProperties.Add(type.FullName + "." + member);
}
lock (popularProperties) {
popularProperties.Add(type.FullName + "." + member);
}
}
public static bool IsAdvanced(DesignItemProperty p)
public static bool IsPopular(DesignItemProperty p)
{
lock (advancedProperties) {
if (advancedProperties.Contains(p.DependencyFullName)) {
return true;
}
}
return p.IsAdvanced;
lock (popularProperties) {
if (popularProperties.Contains(p.DependencyFullName)) {
return true;
}
}
return false;
}
public static string[] CategoryOrder { get; set; }
static Dictionary<string, NumberRange> ranges = new Dictionary<string, NumberRange>();
public static void AddValueRange(DependencyProperty p, double min, double max)

41
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/Category.cs → src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/PropertyGrid/Category.cs

@ -6,20 +6,20 @@ using System.Collections.ObjectModel; @@ -6,20 +6,20 @@ using System.Collections.ObjectModel;
using System.ComponentModel;
using ICSharpCode.WpfDesign.PropertyGrid;
namespace ICSharpCode.WpfDesign.Designer.PropertyGrid
namespace ICSharpCode.WpfDesign.PropertyGrid
{
public class Category : INotifyPropertyChanged
{
public Category(string name)
{
Name = name;
Properties = new ObservableCollection<PropertyNode>();
MoreProperties = new ObservableCollection<PropertyNode>();
Properties = new PropertyNodeCollection();
//MoreProperties = new ObservableCollection<PropertyNode>();
}
public string Name { get; private set; }
public ObservableCollection<PropertyNode> Properties { get; private set; }
public ObservableCollection<PropertyNode> MoreProperties { get; private set; }
public PropertyNodeCollection Properties { get; private set; }
//public ObservableCollection<PropertyNode> MoreProperties { get; private set; }
bool isExpanded = true;
@ -33,16 +33,31 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid @@ -33,16 +33,31 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid
}
}
bool showMore;
internal bool ShowMoreByFilter;
//bool showMore;
//internal bool ShowMoreByFilter;
public bool ShowMore {
get {
return showMore;
//public bool ShowMore {
// get {
// return showMore;
// }
// set {
// showMore = value;
// RaisePropertyChanged("ShowMore");
// }
//}
bool isVisible;
public bool IsVisible
{
get
{
return isVisible;
}
set {
showMore = value;
RaisePropertyChanged("ShowMore");
set
{
isVisible = value;
RaisePropertyChanged("IsVisible");
}
}

172
src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/PropertyGrid/PropertyNode.cs

@ -7,43 +7,18 @@ using System.Windows; @@ -7,43 +7,18 @@ using System.Windows;
using System.Windows.Controls;
using System.Collections.ObjectModel;
using System.Windows.Data;
using System.Windows.Media;
using System.Windows.Markup;
namespace ICSharpCode.WpfDesign.PropertyGrid
{
public class PropertyNode : INotifyPropertyChanged
{
public PropertyNode(DesignItemProperty[] properties)
: this(properties, null)
{
}
PropertyNode(DesignItemProperty[] properties, PropertyNode parent)
{
this.Properties = properties;
this.Parent = parent;
this.Level = parent == null ? 0 : parent.Level + 1;
foreach (var property in properties) {
property.ValueChanged += new EventHandler(property_ValueChanged);
}
Editor = EditorManager.CreateEditor(FirstProperty);
Children = new ObservableCollection<PropertyNode>();
MoreChildren = new ObservableCollection<PropertyNode>();
UpdateChildren();
}
void property_ValueChanged(object sender, EventArgs e)
{
if (raiseEvents) {
OnValueChanged();
}
}
static object Unset = new object();
public DesignItemProperty[] Properties { get; private set; }
bool raiseEvents = true;
bool hasStringConverter;
public string Name { get { return FirstProperty.Name; } }
public bool IsEvent { get { return FirstProperty.IsEvent; } }
@ -53,6 +28,7 @@ namespace ICSharpCode.WpfDesign.PropertyGrid @@ -53,6 +28,7 @@ namespace ICSharpCode.WpfDesign.PropertyGrid
public PropertyNode Parent { get; private set; }
public int Level { get; private set; }
public Category Category { get; set; }
public ObservableCollection<PropertyNode> Children { get; private set; }
public ObservableCollection<PropertyNode> MoreChildren { get; private set; }
@ -86,7 +62,9 @@ namespace ICSharpCode.WpfDesign.PropertyGrid @@ -86,7 +62,9 @@ namespace ICSharpCode.WpfDesign.PropertyGrid
public object Value {
get {
if (IsAmbiguous) return null;
return FirstProperty.ValueOnInstance;
var result = FirstProperty.ValueOnInstance;
if (result == DependencyProperty.UnsetValue) return null;
return result;
}
set {
SetValueCore(value);
@ -95,11 +73,28 @@ namespace ICSharpCode.WpfDesign.PropertyGrid @@ -95,11 +73,28 @@ namespace ICSharpCode.WpfDesign.PropertyGrid
public string ValueString {
get {
if (Value == null) return null;
return FirstProperty.TypeConverter.ConvertToString(Value);
if (ValueItem == null || ValueItem.Component is MarkupExtension) {
if (Value == null) return null;
if (hasStringConverter) {
return FirstProperty.TypeConverter.ConvertToInvariantString(Value);
}
return "(" + Value.GetType().Name + ")";
}
return "(" + ValueItem.ComponentType.Name + ")";
}
set {
Value = FirstProperty.TypeConverter.ConvertFromString(value);
// TODO: Doesn't work for some reason
try {
Value = FirstProperty.TypeConverter.ConvertFromInvariantString(value);
} catch {
OnValueOnInstanceChanged();
}
}
}
public bool IsEnabled {
get {
return ValueItem == null && hasStringConverter;
}
}
@ -118,6 +113,28 @@ namespace ICSharpCode.WpfDesign.PropertyGrid @@ -118,6 +113,28 @@ namespace ICSharpCode.WpfDesign.PropertyGrid
}
}
public Brush NameForeground {
get {
if (ValueItem != null) {
if (ValueItem.Component is BindingBase)
return Brushes.DarkGoldenrod;
if (ValueItem.Component is StaticResourceExtension ||
ValueItem.Component is DynamicResourceExtension)
return Brushes.DarkGreen;
}
return SystemColors.WindowTextBrush;
}
}
public DesignItem ValueItem {
get {
if (Properties.Length == 1) {
return FirstProperty.Value;
}
return null;
}
}
public bool IsAmbiguous {
get {
foreach (var p in Properties) {
@ -129,6 +146,21 @@ namespace ICSharpCode.WpfDesign.PropertyGrid @@ -129,6 +146,21 @@ namespace ICSharpCode.WpfDesign.PropertyGrid
}
}
bool isVisible;
public bool IsVisible
{
get
{
return isVisible;
}
set
{
isVisible = value;
RaisePropertyChanged("IsVisible");
}
}
public bool CanReset {
get { return IsSet; }
}
@ -168,28 +200,86 @@ namespace ICSharpCode.WpfDesign.PropertyGrid @@ -168,28 +200,86 @@ namespace ICSharpCode.WpfDesign.PropertyGrid
RaisePropertyChanged("ValueString");
RaisePropertyChanged("IsAmbiguous");
RaisePropertyChanged("FontWeight");
RaisePropertyChanged("IsEnabled");
RaisePropertyChanged("NameForeground");
UpdateChildren();
}
void OnValueOnInstanceChanged()
{
RaisePropertyChanged("Value");
RaisePropertyChanged("ValueString");
}
public PropertyNode()
{
Children = new ObservableCollection<PropertyNode>();
MoreChildren = new ObservableCollection<PropertyNode>();
}
PropertyNode(DesignItemProperty[] properties, PropertyNode parent) : this()
{
this.Parent = parent;
this.Level = parent == null ? 0 : parent.Level + 1;
Load(properties);
}
public void Load(DesignItemProperty[] properties)
{
if (Properties != null) {
foreach (var property in Properties) {
property.ValueChanged -= new EventHandler(property_ValueChanged);
property.ValueOnInstanceChanged -= new EventHandler(property_ValueOnInstanceChanged);
}
}
this.Properties = properties;
foreach (var property in properties) {
property.ValueChanged += new EventHandler(property_ValueChanged);
property.ValueOnInstanceChanged += new EventHandler(property_ValueOnInstanceChanged);
}
if (Editor == null)
Editor = EditorManager.CreateEditor(FirstProperty);
hasStringConverter =
FirstProperty.TypeConverter.CanConvertFrom(typeof(string)) &&
FirstProperty.TypeConverter.CanConvertTo(typeof(string));
OnValueChanged();
}
void property_ValueOnInstanceChanged(object sender, EventArgs e)
{
if (raiseEvents) OnValueOnInstanceChanged();
}
void property_ValueChanged(object sender, EventArgs e)
{
if (raiseEvents) OnValueChanged();
}
void UpdateChildren()
{
Children.Clear();
MoreChildren.Clear();
if (Parent == null || Parent.IsExpanded) {
if (IsAmbiguous || FirstProperty.IsCollection || FirstProperty.Value == null) {}
else {
var item = FirstProperty.Value;
var list = TypeHelper.GetAvailableProperties(item.ComponentType)
if (ValueItem != null) {
var list = TypeHelper.GetAvailableProperties(ValueItem.ComponentType)
.OrderBy(d => d.Name)
.Select(d => new PropertyNode(new[] { item.Properties[d.Name] }, this));
.Select(d => new PropertyNode(new[] { ValueItem.Properties[d.Name] }, this));
foreach (var node in list) {
if (Metadata.IsAdvanced(node.FirstProperty)) {
MoreChildren.Add(node);
} else {
Children.Add(node);
if (Metadata.IsBrowsable(node.FirstProperty)) {
node.IsVisible = true;
if (Metadata.IsPopular(node.FirstProperty)) {
Children.Add(node);
} else {
MoreChildren.Add(node);
}
}
}
}

44
src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/PropertyGrid/SortedObservableCollection.cs

@ -0,0 +1,44 @@ @@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;
namespace ICSharpCode.WpfDesign.PropertyGrid
{
public class SortedObservableCollection<T, K> : ObservableCollection<T>
{
public SortedObservableCollection(Func<T, K> keySelector)
{
this.keySelector = keySelector;
this.comparer = Comparer<K>.Default;
}
Func<T, K> keySelector;
IComparer<K> comparer;
public void AddSorted(T item)
{
int i = 0;
int j = Count - 1;
while (i <= j) {
int n = (i + j) / 2;
int c = comparer.Compare(keySelector(item), keySelector(this[n]));
if (c == 0) { i = n; break; }
if (c > 0) i = n + 1;
else j = n - 1;
}
Insert(i, item);
}
}
public class PropertyNodeCollection : SortedObservableCollection<PropertyNode, string>
{
public PropertyNodeCollection() : base(n => n.Name)
{
}
}
}

3
src/AddIns/DisplayBindings/WpfDesign/WpfDesign/Project/WpfDesign.csproj

@ -52,6 +52,7 @@ @@ -52,6 +52,7 @@
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="WindowsBase">
<Private>False</Private>
@ -93,6 +94,7 @@ @@ -93,6 +94,7 @@
<Compile Include="PlacementOperation.cs" />
<Compile Include="PlacementType.cs" />
<Compile Include="PlacementAlignment.cs" />
<Compile Include="PropertyGrid\Category.cs" />
<Compile Include="PropertyGrid\EditorManager.cs" />
<Compile Include="PropertyGrid\Editors\ComboBoxEditor.xaml.cs">
<DependentUpon>ComboBoxEditor.xaml</DependentUpon>
@ -102,6 +104,7 @@ @@ -102,6 +104,7 @@
</Compile>
<Compile Include="PropertyGrid\PropertyEditorAttribute.cs" />
<Compile Include="PropertyGrid\PropertyNode.cs" />
<Compile Include="PropertyGrid\SortedObservableCollection.cs" />
<Compile Include="PropertyGrid\TypeEditorAttribute.cs" />
<Compile Include="PropertyGrid\TypeHelper.cs" />
<Compile Include="ServiceContainer.cs" />

Loading…
Cancel
Save