IsReadonly 变量,它在许多控件上传播

本文关键字:控件 传播 许多 变量 IsReadonly | 更新日期: 2023-09-27 18:30:27

我有一个带有控件的UserControl窗口。
我想为这个UserControl添加Enabled属性,该属性控制所选控件IsReadOnly属性的状态。

我该怎么做?
谢谢 :-)

IsReadonly 变量,它在许多控件上传播

对于UserControl中的每个子控件IsReadOnly属性绑定到父控件:

<TextBox IsReadOnly="{Binding Enabled, RelativeSource={RelativeSource AncestorType={x:Type typeOfUserControl}}}">

并为您定义Enabled依赖项属性UserControl

您还应该使用 Bool 逆转换器将启用逻辑转换为只读逻辑:

[ValueConversion(typeof(bool), typeof(bool))]
    public class InverseBooleanConverter: IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter,
            System.Globalization.CultureInfo culture)
        {
            if (targetType != typeof(bool))
                throw new InvalidOperationException("The target must be a boolean");
            return !(bool)value;
        }
        public object ConvertBack(object value, Type targetType, object parameter,
            System.Globalization.CultureInfo culture)
        {
            throw new NotSupportedException();
        }
    }

上发:来自 MSDN

您可以使用 as 运算符执行某些类型的转换 在兼容的引用类型或可为 null 的类型之间。

所以:

public static readonly DependencyProperty EnabledDependencyProperty = 
     DependencyProperty.Register( "Enabled", typeof(bool),
     typeof(UserControlType), new FrameworkPropertyMetadata(true));
public bool Enabled
{
    get { return (bool)GetValue(EnabledDependencyProperty); }
    set { SetValue(EnabledDependencyProperty, value); }
}