{x:Null}和Transparent有什么区别?

50

下面两个的区别是什么?

Background="{x:Null}"

Background="Transparent"

1
这就像设置一个字符串 nullstring.Empty 一样。null 不会初始化它。String.Empty 会初始化它,但不会放置任何内容。毛刷也是一样的。x:null 表示 null,而 Transparent 表示初始化为无颜色,并且当然还有其他人指出的单击功能。 - Nikhil Agrawal
5个回答

57

Transparent将创建一个初始化为透明颜色的画刷,null会将属性设置为null,这意味着目标属性没有附加任何画刷。 在WPF中,将画刷设置到元素往往非常重要。例如,如果要跟踪元素中的鼠标按下事件,则必须设置背景颜色。如果您不想设置实心颜色(使其不透明),可以使用透明画刷。这可以通过字符串值“Transparent”来完成。
区别在于属性设置的方式。如果将null分配给画刷属性,则该属性将确实设置为null。如果将字符串“Transparent”设置为属性值,则将使用默认值转换器将其转换为Brushes.Transparent画刷。

简短版:{x:Null}将目标属性设置为null,“Transparent”将目标属性设置为透明画刷。


20
具有透明背景的控件可能会使得点击或其他事件无法穿过,即使你可以透过透明背景看到另一个控件。相比之下,使用空背景则能让事件穿透到底层控件。 - Adam Price
@Kent +1没想到。那么000000和FFFFFF之间的值是什么情况? - Markus Hütter

23

两者都是设置Background属性的本地值。前者将其设置为null,而后者将其设置为Brushes.Transparent

需要注意以下几点:


关于 #00000000 的有趣注释。那么在黑色和白色之间的值呢?#00AAAAAA 是否会被命中测试可见?此外,这种差异有什么意义,我并没有看出来。 - Snowbear
据我所知,#00000000 是命中测试可见的,而 null 则不是。如果您在 Button 上放置一个 Border 并将 BorderBackground 设置为 #00000000,则该 Button 将无法点击。但是,如果使用 {x:Null},则可以点击。 - Fredrik Hedblad
1
@Meleak:确实,我刚刚做了一些测试,发现情况也是如此。我以为可能是早期WPF版本的行为变化,但我也检查了一下。看来我误导了 - 我已经更新了我的答案。 - Kent Boogaart

11

5

具有透明背景的元素在点击背景时会接收鼠标点击事件,而具有Null背景的元素则不会。


1

透明刷子

将导致背景的alpha通道被设置为0,即100%透明

{x:Null}

将导致背景被设置为WPF的默认控件颜色,通常在一些属性(如DataGrid.RowBackground)上是白色,而在大多数其他属性上是透明

习惯指定刷子颜色是一个好习惯,因为将刷子设置为 Null可能会导致不希望的默认颜色。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接