如何更改ListView的自定义元素的不透明度

时间:2014-04-04 07:40:10

标签: c# wpf xaml listview windows-8.1

我有列表视图,我想设置一些元素的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属性。

4 个答案:

答案 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>