根据我对附加属性的理解,我相信我可以设置一个属性值,该属性值将应用于与该类型匹配的容器的所有子级。例如,如果我在StackPanel中有许多TextBox,那么我可以通过在StackPanel的声明中将TextBox.IsEnabled属性设置为false来禁用它们:
<StackPanel TextBox.IsEnabled="False" Orientation="Horizontal">
...
</StackPanel>
我在Visual Studio中尝试了这个,并且Xaml设计器完全按照预期灰色显示了StackPanel中的TextBox,但是当我尝试编译时,我遇到了错误:
在'TextBox'
类型中找不到可附加属性'IsEnabled'
我误解了附加属性吗?他们只是从祖先到孩子吗?如果是这样,有没有办法做我正在尝试的事情,即将所有子TextBox
es IsEnabled
属性设置为false?
感谢您的任何指示
答案 0 :(得分:1)
是的,附加属性允许在父级上设置属性值,子级继承该值。另一方面,TextBox.IsEnabled
不是附加属性,因此您无法做您想做的事情。
也许通过一些自定义面板和/或自定义附加属性编程可以得到你想要的东西。
但是,您也可以使用Style
获得相同的结果,如果需要,您还可以将IsEnabled属性绑定到自定义逻辑。
<StackPanel Width="200" Height="50" >
<StackPanel.Resources>
<Style TargetType="TextBox">
<Setter Property="IsEnabled" Value="False" />
</Style>
</StackPanel.Resources>
<TextBox Text="one" />
<TextBox Text="two" />
</StackPanel>