zoukankan      html  css  js  c++  java
  • wpf isEnabled属性从其container继承下来的问题

    Let's suppose we have the following xaml:
    <Grid IsEnabled = false>
        <TextBox IsEnabled =  true/>
    </Grid>

    Although the TextBox's IsEnabled property is set to true it will inherit it's value from it's container, in this case th Grid.

    Yes, but is it possible to redefine the IsEnabled property in the child controls?

    Solution:

    Strictly speaking, the IsEnabled property isn't inheritable -- it's defined on UIElement, whereas inheritance is a FrameworkElement concept.

    The way in which Avalon enforces this is via a CoerceValueCallback.  If the parent has IsEnabled is false, the child coerces it to be false as well.

    One reason we have the parent value cascade down to the children is that it's a common  for someone to want to disable an entire subtree and it would be a burden to force users to recursively go down and disable everything.

    If you want to disable an entire panel except a few controls I highly recommend you don't set IsEnabled=false on the parent and instead just disable the controls you want disabled.

    There is, however, a way to somewhat do what you want if you're willing to use subclass the controls you're using.  I would do this with caution, however.  Input may still work properly, but its by no means guaranteed.

    publicclassMyTextBox : TextBox

     

    {

      static MyTextBox()

      {

        MyTextBox.IsEnabledProperty.OverrideMetadata(typeof(MyTextBox),

        newUIPropertyMetadata(true,

        newPropertyChangedCallback(IsEnabledPropertyChanged),

        newCoerceValueCallback(CoerceIsEnabled)));

      }

      privatestaticvoid IsEnabledPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs args)

      {

      }

      privatestaticobject CoerceIsEnabled(DependencyObject source, object value)

      {

        return value;

      }

    }


     

  • 相关阅读:
    黑马程序员——用函数实现模块化程序设计(一)
    RN个人笔记SectionListView
    小程序实现APP底部(TabBar)页面控制效果
    #import "项目名-Swift.h"的介绍
    OC & Swift中UITextFiled、UITextView限制输入字数
    Xcode8使用CoreData如何生成OC和Swift版的SubClass
    Swift之“闭包”的应用
    Swift中两种桥接头文件创建方式
    swift头部无线轮播视图
    swift中collectionView的简单用法
  • 原文地址:https://www.cnblogs.com/liangouyang/p/1310355.html
Copyright © 2011-2022 走看看