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


PropertyOrder - класс

Обновлен: Ноябрь 2007

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

Пространство имен:  Microsoft.Windows.Design.PropertyEditing
Сборка:  Microsoft.Windows.Design (в Microsoft.Windows.Design.dll)

Синтаксис

'Декларация
Public NotInheritable Class PropertyOrder _
    Inherits OrderToken
'Применение
Dim instance As PropertyOrder
public sealed class PropertyOrder : OrderToken
public ref class PropertyOrder sealed : public OrderToken
public final class PropertyOrder extends OrderToken

Заметки

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

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

Bb515058.alert_note(ru-ru,VS.90).gifПримечание.

Такое поведение отличается от конструктора 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


Friend Class Metadata
    Implements IRegisterMetadata

    ' Called by the designer to register any design-time metadata.
    Public Sub Register() Implements IRegisterMetadata.Register
        Dim builder As New AttributeTableBuilder()

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

        builder.AddCustomAttributes( _
            GetType(Button), _
            FrameworkElement.WidthProperty, _
            New PropertyOrderAttribute( _
                PropertyOrder.CreateBefore( _
                    PropertyOrderTokens.LayoutSizePriority)))

        builder.AddCustomAttributes( _
            GetType(Button), _
            FrameworkElement.VerticalAlignmentProperty, _
            New PropertyOrderAttribute( _
                PropertyOrder.CreateAfter( _
                    PropertyOrderTokens.LayoutAlignmentPriority)))

        builder.AddCustomAttributes( _
            GetType(Button), _
            FrameworkElement.HorizontalAlignmentProperty, _
            New PropertyOrderAttribute( _
                PropertyOrder.CreateBefore( _
                    PropertyOrderTokens.LayoutAlignmentPriority)))

        MetadataStore.AddAttributeTable(builder.CreateTable())

    End Sub
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;
        }
    }
}

internal class Metadata : IRegisterMetadata
{
    // Called by the designer to register any design-time metadata.
    public void Register()
    {
        AttributeTableBuilder builder = new AttributeTableBuilder();

        builder.AddCustomAttributes(
            typeof( Button ),
            FrameworkElement.HeightProperty, 
            new PropertyOrderAttribute(
                PropertyOrder.CreateAfter(
                PropertyOrderTokens.LayoutSizePriority)));

        builder.AddCustomAttributes(
            typeof(Button),
            FrameworkElement.WidthProperty, 
            new PropertyOrderAttribute(
                PropertyOrder.CreateBefore(
                PropertyOrderTokens.LayoutSizePriority))); 

        builder.AddCustomAttributes(
            typeof(Button),
            FrameworkElement.VerticalAlignmentProperty, 
            new PropertyOrderAttribute(
                PropertyOrder.CreateAfter(
                PropertyOrderTokens.LayoutAlignmentPriority))); 

        builder.AddCustomAttributes(
            typeof(Button),
            FrameworkElement.HorizontalAlignmentProperty, 
            new PropertyOrderAttribute(
                PropertyOrder.CreateBefore(
                PropertyOrderTokens.LayoutAlignmentPriority)));

        MetadataStore.AddAttributeTable(builder.CreateTable());
    }
}

Иерархия наследования

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

Потокобезопасность

Любые открытые члены этого типа, объявленные как static (Shared в Visual Basic), являются потокобезопасными. Потокобезопасность членов экземпляров не гарантируется.

См. также

Ссылки

PropertyOrder - члены

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

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

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

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