1

我一直在研究附加属性,并提出了一个有趣的理论问题。我知道如果我想通过 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隐藏这个附加属性实际上是由超类定义的事实?

谢谢,

科比

4

1 回答 1

2

我不确定我是否看到了问题。我试过了,它有效。此外,智能正在发挥作用。您使用的是哪个 .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() { }
}
于 2011-01-02T22:15:30.210 回答