【问题标题】:The attachable property 'IsEnabled' was not found in type 'TextBox'在“TextBox”类型中找不到可附加属性“IsEnabled”
【发布时间】:2013-01-12 15:17:03
【问题描述】:

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

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

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

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

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

感谢大家的指点

【问题讨论】:

标签: wpf visual-studio attached-properties isenabled


【解决方案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>

【讨论】:

  • 我只处理几个文本框并且它们是静态的(即总是 RO),所以我只是想找到一个快捷方式来节省我输入 IsEnabled="False" 的次数。我显然没有从我的读数中获得附加属性,我认为它们会冒泡并向下隧道。那好吧。我现在决定在每个 TextBox 中设置 IsEnabled。谢谢你的关注。你说我做不到,所以我称之为答案。干杯。
  • 隧道和冒泡概念与路由事件有关。在(附加)属性的情况下,有人谈到值继承。
猜你喜欢
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
  • 2015-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多