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