The attachable property 'IsEnabled' was not found in type 'TextBox'
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?
谢谢提供任何指导。
问题出现的原因是,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
,这样也可以达到相同的效果。