WPF透明ListView背景与非透明ListViewItems

时间:2018-02-07 14:43:03

标签: c# wpf listview

我正在尝试制作一个半透明背景的WPF ListView(它有一个颜色填充和0.5不透明度),但我希望它的项目不是半透明的(有1个不透明度)。问题是每当我将ListViewItems的不透明度设置为高于ListView时,它就不起作用。例如,当我将其设置为1时,它仍然保持在0.5,因为这是它的母对象的不透明度。是否有一些解决方法让它像我想的那样工作?

2 个答案:

答案 0 :(得分:2)

不要搞乱ListView对象的Opacity属性。将它的背景颜色设置为#80'您的RGB值在这里'。基本上,使用所需颜色的RGB值,并将A(alpha)值设置为半透明,即十六进制为80。

这将对ListView项目的不透明度产生影响。

当你想要一切半透明时,不透明度很有用。如果您需要更细粒度的控制(在您的情况下执行),那么通过在个别项目中使用Alpha通道可以更好地满足您的需求。颜色/填充/背景属性。在WPF中,颜色的十六进制表示为:#ARGB,其中每个字母都是一个两位十六进制值,表示十进制中0到255之间的值。 A是Alpha通道,R是红色通道,G是绿色通道,B是蓝色通道。

例如#FF808080是完全不透明的中灰色,#01FFFFFF几乎完全透明的白色。当你希望某些东西看起来透明(或至少暴露它背后的颜色)时,第二个特别有用,但你仍然希望能够点击它。 100%透明的项目无法点击。

答案 1 :(得分:0)

您应该可以通过定义自定义ControlTemplate来完成此操作,您可以在其中设置Opacity元素的Border属性,并将ItemsPresenter放在此<ListView Height="100" Background="Yellow"> <ListView.Style> <Style TargetType="ListView"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ListView}"> <Grid> <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="1" SnapsToDevicePixels="true" Opacity="0.5"> </Border> <ScrollViewer Focusable="false" Padding="{TemplateBinding Padding}" Margin="{TemplateBinding BorderThickness}"> <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> </ScrollViewer> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsEnabled" Value="false"> <Setter Property="Background" TargetName="Bd" Value="#FFFFFFFF"/> <Setter Property="BorderBrush" TargetName="Bd" Value="#FFD9D9D9"/> </Trigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsGrouping" Value="true"/> <Condition Property="VirtualizingPanel.IsVirtualizingWhenGrouping" Value="false"/> </MultiTrigger.Conditions> <Setter Property="ScrollViewer.CanContentScroll" Value="false"/> </MultiTrigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </ListView.Style> <ListViewItem Background="Yellow">1</ListViewItem> <ListViewItem Background="Yellow">2</ListViewItem> <ListViewItem Background="Yellow">3</ListViewItem> </ListView> 之上。以下是您的示例:

var = MyVar("newValue")

enter image description here