IsReadonly 变量,它在许多控件上传播
本文关键字:控件 传播 许多 变量 IsReadonly | 更新日期: 2023-09-27 18:30:27
我有一个带有控件的UserControl
窗口。
我想为这个UserControl
添加Enabled
属性,该属性控制所选控件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); }
}