共用方式為


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 的淺層複本 (Shallow Copy)。 (繼承自 Object)。
受保護的方法 ResolveConflict 當兩個 OrderToken 物件看似對等時,會由 CompareTo 實作來呼叫。 (繼承自 OrderToken)。
公用方法 ToString 傳回表示目前物件的字串。 (繼承自 Object)。

回頁首

備註

建立私用 PropertyOrder 執行個體,以在 [屬性] 視窗中將特定一組屬性組成群組。

PropertyOrder 類別會控制屬性排序,其中包含根屬性與子屬性。 根屬性會先整理為不同分類,然後依字母順序排序,最後依 PropertyOrder 排序。 子屬性會依 PropertyOrder 排序,然後依字母順序排序。

注意事項注意事項

這種行為不同於 Windows Form 設計工具,該設計工具會使用 GetProperties 方法來決定屬性的順序。 若為 WPF 設計工具,會使用 PropertyOrder 類別來排序屬性。

PropertyOrder 類別會提供標準順序語彙基元 (Token)。 這些系統定義的順序語彙基元包含 EarlyDefaultLate 屬性。 Early 順序語彙基元會參考 [屬性] 視窗中更高的位置。

提供 Default 順序給沒有特定屬性順序的屬性。 您可以從這個類別衍生,並且建立自己的自訂順序語彙基元,這可保證屬性順序和屬性群組。

範例

下列程式碼範例顯示如何從 PropertyOrder 衍生,以實作

用於 WidthHeight 屬性的 LayoutSizePriority 類別。 這會在 Early 順序之後建立。 因此,在清單中它會出現在 Early 屬性的後面。 LayoutAlignmentPriority 用於 HorizontalAlignmentVerticalAlignment 屬性,而且建立在 LayoutSizePriority 之後。

透過使用 PropertyOrderAttribute,PropertyOrder 執行個體會繫結至屬性。 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();
        }
    }
}

執行緒安全

這個型別的任何 Public static (在 Visual Basic 中為 Shared) 成員都具備執行緒安全。並非所有的執行個體成員都是安全執行緒。

請參閱

參考

Microsoft.Windows.Design.PropertyEditing 命名空間

其他資源

屬性編輯架構

WPF 設計工具擴充性