我一直在使用附加属性,并提出了一个有趣的理论问题。我知道如果我想通过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
答案 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() { }
}