namespace System.Activities.Presentation.PropertyEditing { using System; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; using System.Text; using System.Windows; using System.Windows.Media; using System.Activities.Presentation.Internal.Properties; using System.Activities.Presentation; /// /// Derive this class to provide a custom CategoryEditor for a set of Properties in a property /// browser host. /// public abstract class CategoryEditor { /// /// This method is called once for each property in the category to determine which properties /// are edited by this CategoryEditor. When a property is consumed by a CategoryEditor, it does /// not show up as a separate row in that category. /// /// The PropertyEntry to check to see if its edited by this CategoryEditor /// true if this editor edits that property, otherwise false public abstract bool ConsumesProperty(PropertyEntry propertyEntry); /// /// Returns a localized string that indicates which category this editor belongs to. CategoryEditors are /// defined on types and, thus, at load time they need to indicate the actual category they belong to. /// public abstract string TargetCategory { get; } /// /// Returns a DataTemplate that is hosted by the PropertyInspector as the UI for a CategoryEditor. /// The DataSource of this DataTemplate is set to a CategoryEntry. /// public abstract DataTemplate EditorTemplate { get; } /// /// Returns an object that the host can place into a ContentControl in order to display it. /// This icon may be used to adorn the editor for this category in /// a collapsed mode, should it support one. /// /// The desired size of the image to return. This method should make /// the best attempt in matching the requested size, but it doesn't guarantee it. public abstract object GetImage(Size desiredSize); /// /// Utility method that creates a new EditorAttribute for the specified /// CategoryEditor /// /// CategoryEditor instance for which to create /// the new EditorAttribute /// New EditorAttribute for the specified CategoryEditor public static EditorAttribute CreateEditorAttribute(CategoryEditor editor) { if (editor == null) throw FxTrace.Exception.ArgumentNull("editor"); return CreateEditorAttribute(editor.GetType()); } /// /// Utility method that creates a new EditorAttribute for the specified /// CategoryEditor type /// /// CategoryEditor type for which to create /// the new EditorAttribute /// New EditorAttribute for the specified CategoryEditor type public static EditorAttribute CreateEditorAttribute(Type categoryEditorType) { if (categoryEditorType == null) throw FxTrace.Exception.ArgumentNull("categoryEditorType"); if (!typeof(CategoryEditor).IsAssignableFrom(categoryEditorType)) throw FxTrace.Exception.AsError(new ArgumentException( string.Format( CultureInfo.CurrentCulture, Resources.Error_ArgIncorrectType, "categoryEditorType", typeof(CategoryEditor).Name))); return new EditorAttribute(categoryEditorType, categoryEditorType); } } }