XAML中的附加属性没有“属性”一词

时间:2010-10-15 03:09:32

标签: wpf xaml attached-properties

MS定义附加属性,如'Grid.RowProperty'和'Grid.ColumnProperty',但在XAML中你只需用'Grid.Row'和'Grid.Column'来调用它

我尝试使用名为'MyValProperty'的附加属性执行相同操作,该属性在类'Foo'上注册了名为'MyVal',但XAML不会让我输入'Foo.MyVal'而是让我输入'Foo.MyValProperty'MS如何做到这一点?我错过了什么?

1 个答案:

答案 0 :(得分:2)

背景如下register an attached property

public static readonly DependencyProperty IsBubbleSourceProperty = DependencyProperty.RegisterAttached(
    "IsBubbleSource",
    typeof(Boolean),
    typeof(AquariumObject),
    new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender)
);
public static void SetIsBubbleSource(UIElement element, Boolean value)
{
    element.SetValue(IsBubbleSourceProperty, value);
}
public static Boolean GetIsBubbleSource(UIElement element)
{
    return (Boolean)element.GetValue(IsBubbleSourceProperty);
}

您还可以使用标准属性格式而不是Set / Get构造。这是WPF有一个强有力的公约的领域之一。 AttachedProperty(或任何DependencyProperty)有三个部分。第一种是使用DependencyProperty.RegisterAttached注册属性,返回值应设置为名为[Property Name] Property的公共静态变量。第二个是注册你的财产时的第一个参数应该是“[Property Name]”。第三个是你将用来与外界交互的Get / Set方法,它们应该命名为Get [Property Name],Set [Property Name]。

如果按照惯例进行设置,WPF会识别出两者已连接,并且应该允许您按预期使用该属性。