我有列表视图,我想设置一些元素的opacity
,但不幸的是opacity
上的ListViewItem
只是不起作用...
<Style x:Name="TileStyle" TargetType="ListView">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<Grid Width="185"
Height="85"
Margin="20"
Background="Red"
Opacity="0.1">
<TextBlock Text="fasada" />
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
<ListView x:Name="XListView"
ItemsSource="{Binding li}"
Style="{StaticResource TileStyle}" />
仅当我为ListView
对象设置一个不透明度时,它才有效。
我发现article描述了类似问题,但XListView.Items[i]
只是int,所以我无法设置其Opacity
...
我忘了说这是Windows-8.1
的程序,因此可能不支持某些WPF
属性。
答案 0 :(得分:0)
卢卡斯在这里: - )
要成功为您的ListViewItem
应用不透明度,您需要具备此类内容
<Style x:Key="{x:Type ListViewItem}" TargetType="ListViewItem">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="Opacity" Value="1.0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Border Name="Border" Padding="2" SnapsToDevicePixels="true" Background="Transparent" CornerRadius="15">
<GridViewRowPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter TargetName="Border" Property="Background" Value="{StaticResource SelectedBackgroundBrush}"/>
<Setter Property="Opacity" Value="0.4"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/>
<Setter Property="Background" Value="WhiteSmoke"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
试试看,告诉我们。 HTH
<强>更新强>
看到新信息后,您需要
<Style x:Key="{x:Type ListViewItem}" TargetType="ListViewItem">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="OverridesDefaultStyle" Value="true"/>
<Setter Property="Opacity" Value="{Binding VM.Property}"/>
</Style>
虽然这会要求列表中的每个项目都定义不透明度。 您始终可以使用fallbackValue来使用默认opacity = 1.0
答案 1 :(得分:0)
仅举例。 查看项目的模型:
public class Item
{
public double Opacity {get;set;}
public string Value {get;set;}
}
ListView xaml代码:
<ListView>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Opacity" Value="{Binding Opacity}" />
<Setter Property="Content" Value="{Binding Value}" />
</Style>
</ListView.ItemContainerStyle>
</ListView>
如果您想在运行时更改不透明度,则应为Item
类实施INotifyProperyChanged。
答案 2 :(得分:0)
我正在考虑你要改变listview元素的不透明度,即listviewitem,所以你需要改变listviewitem样式,即Listview Itemcontainerstyle,并通过编辑listview项目的模板,你可以设置不透明度元素。我正在使用网格显示listviewitem的3个变通方法style.Hope这有帮助
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<!--****************************1st method*******************************-->
<ListView x:Name="XListView" Grid.Column="0" ItemsSource="{Binding li}" >
<ListView.Resources>
<Style TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Grid Width="185" Height="85" Margin="20" Background="Red" Opacity="0.1">
<TextBlock Text="TextData"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.Resources>
<ListViewItem>ListviewItemData1</ListViewItem>
</ListView>
<!--**************************2nd method***********************************-->
<ListView Grid.Column="1" ItemsSource="{Binding li}" >
<ListView.Resources>
<Style TargetType="ListViewItem">
<Setter Property="ContentTemplate" >
<Setter.Value>
<DataTemplate>
<Grid Width="185" Height="85" Margin="20" Background="Red" Opacity="0.1">
<TextBlock Text="TextData"/>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.Resources>
<ListViewItem>ListviewItemData1</ListViewItem>
</ListView>
<!--*****************3rd method*****************-->
<ListView Grid.Column="2">
<ListViewItem >
<ListViewItem.Template>
<ControlTemplate TargetType="ListViewItem">
<Grid Width="185" Height="85" Margin="20" Background="Red" Opacity="0.1">
<TextBlock Text="TextData"/>
</Grid>
</ControlTemplate>
</ListViewItem.Template>
</ListViewItem>
</ListView>
</Grid>
您也可以像这样设置不透明度
<SolidColorBrush x:Key="RedBrush" Color="Red" Opacity="0.1"></SolidColorBrush>
答案 3 :(得分:0)
<Page.Resources>
<Style x:Key="tootStyle" TargetType="ListViewItem">
<Setter Property="Opacity" Value="0.1"/>
</Style>
</Page.Resources>
<ListView ItemContainerStyle="{StaticResource tootStyle}">
<ListViewItem Background="red">AZERTY</ListViewItem>
<ListViewItem Background="Green">AZERTY</ListViewItem>
<ListViewItem Background="Blue">AZERTY</ListViewItem>
<ListViewItem Background="Purple">AZERTY</ListViewItem>
</ListView>