在'TextBox'类型中找不到可附加属性'IsEnabled'

时间:2013-01-29 05:39:56

标签: wpf visual-studio attached-properties isenabled

根据我对附加属性的理解,我相信我可以设置一个属性值,该属性值将应用于与该类型匹配的容器的所有子级。例如,如果我在StackPanel中有许多TextBox,那么我可以通过在StackPanel的声明中将TextBox.IsEnabled属性设置为false来禁用它们:

<StackPanel TextBox.IsEnabled="False" Orientation="Horizontal">
...
</StackPanel>

我在Visual Studio中尝试了这个,并且Xaml设计器完全按照预期灰色显示了StackPanel中的TextBox,但是当我尝试编译时,我遇到了错误:

  

在'TextBox'

类型中找不到可附加属性'IsEnabled'

我误解了附加属性吗?他们只是从祖先到孩子吗?如果是这样,有没有办法做我正在尝试的事情,即将所有子TextBox es IsEnabled属性设置为false?

感谢您的任何指示

1 个答案:

答案 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>