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 类提供。 这些由系统定义的顺序标记包括 Early、Default 和 Late 属性。 Early 顺序标记指向“属性”窗口中的较高位置。
没有特定属性顺序的属性将被赋予 Default 顺序。 您可以从该类派生并创建自己的自定义顺序标记,从而可以保证属性顺序和属性分组。
示例
下面的代码示例演示如何从 PropertyOrder 派生来实现
用于 Width 和 Height 属性的 LayoutSizePriority 类。 它是在 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(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。
请参见
参考
Microsoft.Windows.Design.PropertyEditing 命名空间