出于说明目的,假设我想创建一个名为 BizarroTextBox 的 WPF 文本框的子类,其中 IsReadOnly 属性与其默认行为具有相反的效果。
现在通常在非 WPF 世界中,对于假设的“文本框”控件,这将是相对微不足道的......
public class BizarroTextBox : TextBox
{
public override bool IsReadOnly
{
get{ return !base.IsReadOnly; }
set{ base.IsReadOnly = !value; }
}
}
...但我不确定在处理 DependencyObjects 和 DependencyProperties 时如何/是否可以做类似的事情。
虽然我可以在我的子类中重新定义属性的元数据并使用 Coalesce 函数来反转该值,但我不知道有一种方法可以在返回时反转它。
您也不能简单地使用布尔反转转换器,因为只有一个对象不能同时是源和目标,除非您连接两个不同的属性,而我们不是。
您也不能在 CLR getter/setter 中执行此操作,因为它们是使用绑定时绕过的便捷方法。
如果他们有一种在路上合并的方法会容易得多,但我不知道有任何这样的事情。那么这可以做到吗?