WPF中关于背景透明和背景无
此时,我代码中是写的有有个控件,一个Border ,一个TextBox ,范围都是全屏这么大,可以输入TextBox
因为,当border没有设置背景的时候,实际上是:
<Border Background="{x:Null}" />
但是,如果我们想要点击Border,不输入TextBox的时候,可以给border设置一个背景颜色,这里推荐透明色Transparent,因为表现效果上,和不设置颜色一样。
<TextBox Width="100" Height="30"/>
<Border Background="Transparent" />
此时:textbox无法聚焦
案例:
我写一个listView 然后想要鼠标滑动每一行的时候,加个背景颜色
核心样式代码:
<Style TargetType="ListViewItem">
<Setter Property="Background" Value="Orange"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Border x:Name="border">
<GridViewRowPresenter />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="border" Property="Background" Value="gray"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
核心xaml代码
<ListView>
<ListView.View>
<GridView>
<GridViewColumn Header="A" DisplayMemberBinding="{Binding [0]}" Width="200"/>
<GridViewColumn Header="B" DisplayMemberBinding="{Binding [1]}" Width="200"/>
<GridViewColumn Header="C" DisplayMemberBinding="{Binding [2]}" Width="200"/>
</GridView>
</ListView.View>
<ListViewItem Content="ABC"/>
<ListViewItem Content="ABC"/>
<ListViewItem Content="ABC"/>
<ListViewItem Content="ABC"/>
</ListView>
效果展示: 此时没有变色
没有变色的原因是:
当给border增加个背景颜色为空:
修改后的样式:
<Style TargetType="ListViewItem">
<Setter Property="Background" Value="Orange"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Border x:Name="border" Background="Transparent">
<GridViewRowPresenter />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="border" Property="Background" Value="gray"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
效果:鼠标同样的位置,加个透明色却可以触发
完整代码:
<Window x:Class="XH.TemplateLesson.ListViewWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:XH.TemplateLesson"
mc:Ignorable="d"
Title="ListViewWindow" Height="450" Width="800">
<Window.Resources>
<Style TargetType="ListViewItem">
<Setter Property="Background" Value="Orange"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Border x:Name="border" Background="Transparent">
<GridViewRowPresenter />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="border" Property="Background" Value="gray"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<ListView>
<ListView.View>
<GridView>
<!--几列-->
<GridViewColumn Header="A" DisplayMemberBinding="{Binding [0]}" Width="200"/>
<GridViewColumn Header="B" DisplayMemberBinding="{Binding [1]}" Width="200"/>
<GridViewColumn Header="C" DisplayMemberBinding="{Binding [2]}" Width="200"/>
</GridView>
</ListView.View>
<ListViewItem Content="ABC"/>
<ListViewItem Content="ABC"/>
<ListViewItem Content="ABC"/>
<ListViewItem Content="ABC"/>
</ListView>
</Grid>
</Window>
总结:
在一些特殊的情况中,如果想要在空白的地方设置触发事件的话,需要设置透明色,不可以不设置背景颜色。