PropertyOrder 类

用于设置属性在某个类别或子属性列表中的显示顺序。

继承层次结构

System.Object
  Microsoft.Windows.Design.OrderToken
    Microsoft.Windows.Design.PropertyEditing.PropertyOrder

命名空间:  Microsoft.Windows.Design.PropertyEditing
程序集:  Microsoft.Windows.Design.Interaction(在 Microsoft.Windows.Design.Interaction.dll 中)

语法

声明
Public NotInheritable Class PropertyOrder _
    Inherits OrderToken
public sealed class PropertyOrder : OrderToken
public ref class PropertyOrder sealed : public OrderToken
[<Sealed>]
type PropertyOrder =  
    class
        inherit OrderToken
    end
public final class PropertyOrder extends OrderToken

PropertyOrder 类型公开以下成员。

属性

  名称 说明
公共属性静态成员 Default 获取系统定义的默认顺序位置。
公共属性静态成员 Early 获取系统定义的靠前的顺序位置。
公共属性静态成员 Late 获取系统定义的靠后的顺序位置。

页首

方法

  名称 说明
公共方法 CompareTo 将此顺序标记与指定的顺序标记进行比较。 (继承自 OrderToken。)
公共方法静态成员 CreateAfter 创建一个添加到指定标记之后的 PropertyOrder 对象。
公共方法静态成员 CreateBefore 创建一个添加到指定标记之前的 PropertyOrder 对象。
公共方法 Equals 确定指定的 Object 是否等于当前的 Object。 (继承自 OrderToken。)
受保护的方法 Finalize 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
公共方法 GetHashCode 用作特定类型的哈希函数。 (继承自 OrderToken。)
公共方法 GetType 获取当前实例的 Type。 (继承自 Object。)
受保护的方法 MemberwiseClone 创建当前 Object 的浅表副本。 (继承自 Object。)
受保护的方法 ResolveConflict 当两个 OrderToken 对象看起来等效时,由默认的 CompareTo 实现调用。 (继承自 OrderToken。)
公共方法 ToString 返回表示当前对象的字符串。 (继承自 Object。)

页首

备注

创建私有 PropertyOrder 实例,以便在“属性”窗口中将一组特定的属性组合在一起。

PropertyOrder 类用于控制属性(包括根属性和子属性)的排序。 根属性首先按类别排序,然后按字母顺序排序,最后按 PropertyOrder 排序。 子属性先按 PropertyOrder 排序,然后按字母顺序排序。

提示

此行为不同于 Windows 窗体设计器的行为,Windows 窗体设计器使用 GetProperties 方法来确定属性的顺序。 对于 WPF 设计器,属性是使用 PropertyOrder 类进行排序的。

标准顺序标记由 PropertyOrder 类提供。 这些由系统定义的顺序标记包括 EarlyDefaultLate 属性。 Early 顺序标记指向“属性”窗口中的较高位置。

没有特定属性顺序的属性将被赋予 Default 顺序。 您可以从该类派生并创建自己的自定义顺序标记,从而可以保证属性顺序和属性分组。

示例

下面的代码示例演示如何从 PropertyOrder 派生来实现

用于 WidthHeight 属性的 LayoutSizePriority 类。 它是在 Early 顺序之后创建的。 因此,它在列表中出现的顺序晚于 Early 属性。 LayoutAlignmentPriority 用于 HorizontalAlignmentVerticalAlignment 属性,它是在 LayoutSizePriority 之后创建的。

PropertyOrder 实例通过使用 PropertyOrderAttribute 绑定到属性。 CreateBeforeCreateAfter 方法将 Width 放置在 Height 之前,将 HorizontalAlignment 放置在 VerticalAlignment 之前。

Imports System
Imports System.Windows
Imports System.Windows.Controls
Imports Microsoft.Windows.Design.PropertyEditing
Imports Microsoft.Windows.Design.Metadata

Public Class PropertyOrderTokens
    Private Shared layoutSizePriorityValue As PropertyOrder
    Private Shared layoutAlignmentPriorityValue As PropertyOrder


    Public Shared ReadOnly Property LayoutSizePriority() As PropertyOrder
        Get
            If layoutSizePriorityValue Is Nothing Then
                LayoutSizePriority = PropertyOrder.CreateAfter(PropertyOrder.Early)
            End If

            Return layoutSizePriorityValue
        End Get
    End Property


    Public Shared ReadOnly Property LayoutAlignmentPriority() As PropertyOrder
        Get
            If layoutAlignmentPriorityValue Is Nothing Then
                layoutAlignmentPriorityValue = PropertyOrder.CreateAfter(PropertyOrderTokens.LayoutSizePriority)
            End If

            Return layoutAlignmentPriorityValue
        End Get
    End Property
End Class

' Container for any general design-time metadata to initialize.
' Designers look for a type in the design-time assembly that 
' implements IProvideAttributeTable. If found, designers instantiate
' this class and access its AttributeTable property automatically.
Friend Class Metadata
    Implements IProvideAttributeTable

    ' Accessed by the designer to register any design-time metadata.
    Public ReadOnly Property AttributeTable() As AttributeTable _
        Implements IProvideAttributeTable.AttributeTable
        Get
            Dim builder As New AttributeTableBuilder()

            builder.AddCustomAttributes( _
                GetType(Button), _
                "HeightProperty", _
                New PropertyOrderAttribute( _
                    PropertyOrder.CreateAfter( _
                        PropertyOrderTokens.LayoutSizePriority)))

            builder.AddCustomAttributes( _
                GetType(Button), _
                "Width", _
                New PropertyOrderAttribute( _
                    PropertyOrder.CreateBefore( _
                        PropertyOrderTokens.LayoutSizePriority)))

            builder.AddCustomAttributes( _
                GetType(Button), _
                "VerticalAlignment", _
                New PropertyOrderAttribute( _
                    PropertyOrder.CreateAfter( _
                        PropertyOrderTokens.LayoutAlignmentPriority)))

            builder.AddCustomAttributes( _
                GetType(Button), _
                "HorizontalAlignment", _
                New PropertyOrderAttribute( _
                    PropertyOrder.CreateBefore( _
                        PropertyOrderTokens.LayoutAlignmentPriority)))

            Return builder.CreateTable()
        End Get
    End Property
End Class
using System;
using System.Windows;
using System.Windows.Controls;
using Microsoft.Windows.Design.PropertyEditing;
using Microsoft.Windows.Design.Metadata;

public static class PropertyOrderTokens
{
    private static PropertyOrder layoutSizePriority;
    private static PropertyOrder layoutAlignmentPriority;

    public static PropertyOrder LayoutSizePriority
    {
        get
        {
            if (layoutSizePriority == null)
            {
                layoutSizePriority = PropertyOrder.CreateAfter(
                    PropertyOrder.Early);
            }

            return layoutSizePriority;
        }
    }

    public static PropertyOrder LayoutAlignmentPriority
    {
        get
        {
            if (layoutAlignmentPriority == null)
            {
                layoutAlignmentPriority = PropertyOrder.CreateAfter(
                    PropertyOrderTokens.LayoutSizePriority);
            }

            return layoutAlignmentPriority;
        }
    }
}

// Container for any general design-time metadata to initialize.
// Designers look for a type in the design-time assembly that 
// implements IProvideAttributeTable. If found, designers instantiate 
// this class and access its AttributeTable property automatically.
internal class Metadata : IProvideAttributeTable
{
    // Accessed by the designer to register any design-time metadata.
    public AttributeTable AttributeTable
    {
        get
        {
            AttributeTableBuilder builder = new AttributeTableBuilder();

            builder.AddCustomAttributes(
                typeof(Button),
                "Height",
                new PropertyOrderAttribute(
                    PropertyOrder.CreateAfter(
                    PropertyOrderTokens.LayoutSizePriority)));

            builder.AddCustomAttributes(
                typeof(Button),
                "Width",
                new PropertyOrderAttribute(
                    PropertyOrder.CreateBefore(
                    PropertyOrderTokens.LayoutSizePriority)));

            builder.AddCustomAttributes(
                typeof(Button),
                "VerticalAlignment",
                new PropertyOrderAttribute(
                    PropertyOrder.CreateAfter(
                    PropertyOrderTokens.LayoutAlignmentPriority)));

            builder.AddCustomAttributes(
                typeof(Button),
                "HorizontalAlignment",
                new PropertyOrderAttribute(
                    PropertyOrder.CreateBefore(
                    PropertyOrderTokens.LayoutAlignmentPriority)));

            return builder.CreateTable();
        }
    }
}

线程安全

此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

请参见

参考

Microsoft.Windows.Design.PropertyEditing 命名空间

其他资源

属性编辑体系结构

WPF 设计器扩展性