我使用WPF作为示例。假设我们有一个控制X,我们将其背景设置为图像。然后我们希望鼠标悬停没有背景图像。这可以用x:Null来实现。但是如果我们不指定x:Null它会保持相同的图像。
我正在尝试为不支持WPF的平台创建自定义皮肤引擎。我试图弄清楚如何重现这种行为。问题是,如果我有一个类XControlStyle
,这个类的两个实例一个用于正常状态,一个用于鼠标悬停,那么如何实现我在wpf中所做的事情并不明显。
因为设置例如mouseover.Backgroundimage = null它无法告诉用户是否将其设置为null或默认为null。这个问题在值类型中更糟糕。设置所有属性两次不是一个优雅的解决方案。我需要一个解决方案,以使BackgroundImage像从未设置过。我想出了3个解决方案(通过属性,用于存储的字典类,在类包装器中包装属性值)但是虽然我实现了最后一个我不满意。 /> 阅读MSDN文档以获得启发我认为他们以某种方式将这些数据存储为元数据?所以我想知道元数据是否是我的问题的某种解决方案.. 有什么想法吗?
答案 0 :(得分:0)
这些事情是通过dependency property value precedence完成的,有一个值查找系统,并且找到了具有最高优先级的值的值。依赖属性本身就像字典,在不同的层中有几个,例如元素本身和风格。这个系统非常复杂,我认为复制它本身就是一个巨大的项目。