1

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

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

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

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

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

感谢您的任何指点

4

1 回答 1

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>
于 2013-01-29T08:34:17.267 回答