The attachable property 'IsEnabled' was not found in type 'TextBox'

11 浏览
0 Comments

The attachable property 'IsEnabled' was not found in type 'TextBox'

从我对附加属性的理解来看,我相信我可以设置一个属性值,该值将应用于与类型匹配的容器的所有子元素。例如,如果我在StackPanel的声明中将TextBox.IsEnabled属性设置为false,则可以禁用其中的所有TextBox:


...

我在Visual Studio中尝试了这个方法,Xaml设计器按预期在StackPanel中的TextBox上进行了灰显,但当我尝试编译时,出现了错误:

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

我是否误解了附加属性?它们只能从祖先传递到子元素吗?如果是这样,是否有一种方法可以实现我想要的效果,即将所有子元素的TextBox的IsEnabled属性设置为false?

谢谢提供任何指导。

0
0 Comments

问题出现的原因是,TextBox.IsEnabled不是一个附加属性,所以无法在父元素上设置该属性的值并继承给子元素。如果需要实现类似的功能,可以尝试使用自定义面板或自定义附加属性编程来实现。另外,也可以使用Style来达到相同的效果,其中可以将IsEnabled属性绑定到自定义逻辑(如果需要的话)。

解决方法:

StackPanel中设置一个Style,将其TargetType设为TextBox,并将IsEnabled属性的值设为False。这样就可以将IsEnabled属性的默认值设为False,从而实现一次设置多个TextBox的只读属性。

以下是示例代码:

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

对于只有几个静态(始终只读)的TextBox,可以直接在每个TextBox中设置IsEnabled属性为False,这样也可以达到相同的效果。

0