Поделиться через


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 Вызывается с помощью реализации по умолчанию CompareTo, если два объекта OrderToken эквивалентны. (Унаследовано от OrderToken.)
Открытый метод ToString Возвращение строки, представляющей текущий объект. (Унаследовано от Object.)

В начало страницы

Заметки

Чтобы сгруппировать определенный набор свойств в окне свойств, создайте закрытые экземпляры PropertyOrder.

Класс PropertyOrder предназначен для упорядочения свойств (в том числе корневых и подчиненных свойств). Корневые свойства упорядочиваются сначала по категориям, затем в алфавитном порядке, а затем по значению PropertyOrder. Подчиненные свойства упорядочиваются сначала по значению PropertyOrder, а затем в алфавитном порядке.

Примечание

Такое поведение отличается от конструктора Windows Forms, в котором для определения порядка свойств используется метод GetProperties.В сред. Конструктор WPF свойства сортируются с помощью класса PropertyOrder.

В классе PropertyOrder представлены стандартные токены порядка. К системным токенам порядка относятся следующие свойства: Early, Default и Late. Токен порядка Early содержит ссылку на более высокую позицию в окне "Свойства".

Свойствам, которым не назначен определенный порядок, присваивается порядок Default. Допускается создание производных от описанного выше классов и пользовательских токенов порядка, что позволяет обеспечить правильность группировки свойств.

Примеры

В следующем примере кода показано, как создать класс, являющийся производным от класса PropertyOrder, чтобы реализовать класс

Класс LayoutSizePriority, который используется для свойств Width и Height. Производный класс создается после свойства порядка Early. Таким образом, в списке он будет отображаться после свойств Early. Объект LayoutAlignmentPriority используется для свойств HorizontalAlignment и VerticalAlignment создается после LayoutSizePriority.

Экземпляры PropertyOrder привязываются к свойствам с помощью объекта PropertyOrderAttribute. Методы CreateBefore и CreateAfter располагают свойство 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 (Shared в Visual Basic), являются потокобезопасными. Потокобезопасность членов экземпляров не гарантируется.

См. также

Ссылки

Microsoft.Windows.Design.PropertyEditing - пространство имен

Другие ресурсы

Архитектура редактирования свойства

Расширяемость среды конструктора WPF