What's the difference between the following two?
开发者_StackOverflow社区Background="{x:Null}"
and
Background="Transparent"
Transparent
will create a brush that is initialized to a transparent color, null will set the property to null, this means that the destination property has not an brush attached.
In WPF it's often important to set a brush to an element. If you for example want to track mouse downs in an element, you must set a background. If you don't want to set a solid color (make it opaque), you can use a transparent brush. This can be done with the string value "Transparent".
The difference lies in the manner, how the property will be set. If you assign null for a brush-property, the property will be set really to null. If you set the string "Transparent", the default value-converter that converts string to brushes converts this to the Brushes.Transparent
brush.
Short version: {x:Null}
sets the destination property to null. "Transparent" sets the destination property to a transparent brush.
Both are setting the local value of the Background
property. The former sets it to null
and the latter sets it to Brushes.Transparent
.
There are a couple of important points to be aware of:
- Setting the value to
null
is not the same as not setting it at all. Since dependency properties obtain their effective value from multiple sources, setting a local value (even if it'snull
) can take precedence over values potentially sourced from elsewhere, such as a style or animation. - Another option for controlling hit test visibility is the
IsHitTestVisible
property. This property allows you to control hit test visibility regardless of the brush with which theUIElement
is rendered.
{x:Null}
will not be clickable, Transparent
will.
Also see this.
Elements with Transparent
background receive mouse click events when clicking on background, elements with Null
do not.
The Transparent
brush
Will cause the background's alpha channel to be set to 0
which is 100% transparent
The {x:Null}
value
Will cause the background to be set to the default control colour by WPF which is usually White on some properties like DataGrid.RowBackground
and Transparent on most of the other properties.
It's a good habit to specify a brush colour since setting a brush to
Null
may result in undesired default colours.
精彩评论