2011-08-11 41 views
0

我正在使用WPF为例。假设我们有一个控制X,并且我们将它的背景设置为一个图像。然后我们希望在mouseover上没有背景图片。这可以通过x:Null来实现。但是,如果我们不指定x:Null它保持相同的图像。WPF属性和x:空等

我想为不支持WPF的平台创建自定义皮肤引擎。我想弄清楚如何重现这种行为。问题是,如果我有一个类XControlStyle和这个类的两个实例正常状态和一个鼠标悬停然后它不是很明显如何实现我所做的WPF ..

因为设置例如mouseover.Backgroundimage = null它不能告诉用户是否将其设置为null或默认情况下为null ..这个问题是更糟糕的值类型..设置所有属性两次不是一个优雅的解决方案..此外,我需要一个解决方案,以使BackgroundImage像它从未设置。我想出了3个解决方案(通过属性,字典类来存储,在类包装器中包装属性值),但尽管我实现了最后一个我不满意。
阅读MSDN文档受到启发,我认为他们以某种方式将这些数据存储为元数据?所以我想知道元数据是否是我的问题的解决方案.. 任何想法?

回答

0

这些事情是通过dependency property value precedence完成的,有一个值查找系统和找到的值的优先级最高的选择。依赖属性本身就像词典一样,并且在各个层次中有一些属性,例如元素本身和样式。这个系统非常复杂,我认为复制它是一个巨大的项目。