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, а затем в алфавитном порядке.
Примечание. |
---|
Такое поведение отличается от конструктора 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), являются потокобезопасными. Потокобезопасность членов экземпляров не гарантируется.
См. также
Ссылки
Microsoft.Windows.Design.PropertyEditing - пространство имен