子类附加的附加属性的前缀是什么

时间:2011-01-02 21:31:25

标签: wpf silverlight attached-properties

我一直在使用附加属性,并提出了一个有趣的理论问题。我知道如果我想通过XAML设置附加属性,我使用格式:

<control ownerClass.propertyName="some value"/>

我的问题是,如果我从“ownerClass”派生一个类会发生什么。例如,如果我定义以下类:

class MyGrid : Grid {
}

尝试通过XAML进行设置,如下所示

<MyGrid>
    <Button MyGrid.Row = "0">Bla Bla</Button>
</MyGrid>

但智能感知并没有让我失望。一旦我在附加属性上使用了适当的命名空间,它就可以工作了。

另外,它允许我这样做:

<MyGrid>
    <Button Grid.Row = "0">Bla Bla</Button>
</MyGrid>

当然,这是有道理的,因为 Row 附加属性是 Grid 类的静态成员,并由它定义。这里唯一的问题是我的新类的用户知道它是从Grid派生的,并且这个特定的属性是由祖先定义的。对我来说,似乎这是我不想向我的班级用户公开的实现细节。

有没有办法让WPF 隐藏这个附加属性实际上由超类定义的事实?

谢谢,

了Kobi

1 个答案:

答案 0 :(得分:2)

我不确定我是否看到了这个问题。我尝试了这个,它的工作原理。此外,intellisence工作。您使用的是什么.NET版本以及VisualStudio的哪个版本?我尝试使用.NET 4.0和VS2010

<local:MyGrid>
    <local:MyGrid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="Auto"/>
    </local:MyGrid.ColumnDefinitions>
    <Button local:MyGrid.Column="1" Content="Button1"/>
    <Button local:MyGrid.Column="0" Content="Button2"/>
</local:MyGrid>

public class MyGrid : Grid
{
    public MyGrid() { }
}