下面两个的区别是什么?
Background="{x:Null}"
和
Background="Transparent"
Transparent
将创建一个初始化为透明颜色的画刷,null
会将属性设置为null,这意味着目标属性没有附加任何画刷。
在WPF中,将画刷设置到元素往往非常重要。例如,如果要跟踪元素中的鼠标按下事件,则必须设置背景颜色。如果您不想设置实心颜色(使其不透明),可以使用透明画刷。这可以通过字符串值“Transparent”来完成。
区别在于属性设置的方式。如果将null分配给画刷属性,则该属性将确实设置为null。如果将字符串“Transparent”设置为属性值,则将使用默认值转换器将其转换为Brushes.Transparent
画刷。
简短版:{x:Null}
将目标属性设置为null,“Transparent”将目标属性设置为透明画刷。
两者都是设置Background
属性的本地值。前者将其设置为null
,而后者将其设置为Brushes.Transparent
。
需要注意以下几点:
null
并不等同于根本没有设置值。由于依赖属性从多个来源获取其有效值,因此设置本地值(即使是null
)可能优先于可能来自其他位置的值,例如样式或动画。IsHitTestVisible
属性。该属性允许您控制命中测试可见性,而不管UIElement
使用哪种刷子进行渲染。#00000000
的有趣注释。那么在黑色和白色之间的值呢?#00AAAAAA
是否会被命中测试可见?此外,这种差异有什么意义,我并没有看出来。 - Snowbear#00000000
是命中测试可见的,而 null
则不是。如果您在 Button
上放置一个 Border
并将 Border
的 Background
设置为 #00000000
,则该 Button
将无法点击。但是,如果使用 {x:Null}
,则可以点击。 - Fredrik Hedblad具有透明
背景的元素在点击背景时会接收鼠标点击事件,而具有Null
背景的元素则不会。
将导致背景的alpha通道被设置为0
,即100%透明
{x:Null}
值将导致背景被设置为WPF的默认控件颜色,通常在一些属性(如DataGrid.RowBackground
)上是白色,而在大多数其他属性上是透明。
习惯指定刷子颜色是一个好习惯,因为将刷子设置为
Null
可能会导致不希望的默认颜色。
null
和string.Empty
一样。null
不会初始化它。String.Empty
会初始化它,但不会放置任何内容。毛刷也是一样的。x:null
表示null
,而Transparent
表示初始化为无颜色,并且当然还有其他人指出的单击功能。 - Nikhil Agrawal