【问题标题】:WPF remove glossy effect from selection/mouse over of a GridViewWPF 从 GridView 的选择/鼠标上移除光泽效果
【发布时间】:2017-02-13 09:32:53
【问题描述】:

我已经搜索了这个简单问题的答案,但还没有找到解决方案。 我有以下代码:

<Grid>
    <Border BorderBrush="#666666" BorderThickness="1,1,1,1" CornerRadius="3">
        <Border.Background>
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                <GradientStop Color="#FF020f1e" Offset="0"/>
                <GradientStop Color="#FF484F58" Offset="1"/>
            </LinearGradientBrush>
        </Border.Background>
        <ListView Name="lvUsers" Background="Transparent" Foreground="White" Margin="3" FontSize="12" SelectionChanged="lvUsers_SelectionChanged">

            <ListView.Template>
                <ControlTemplate TargetType="{x:Type ListView}">
                    <Border CornerRadius="1" BorderThickness="1" BorderBrush="Transparent">
                        <ScrollViewer>
                            <ItemsPresenter />
                        </ScrollViewer>
                    </Border>
                </ControlTemplate>
            </ListView.Template>

            <ListView.View>
                <GridView>

                    <GridView.Columns>
                        <GridViewColumn>
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <CheckBox Tag="{Binding ID}" IsChecked="{Binding IsChecked}" Checked="CheckBox_CheckedChanged" Unchecked="CheckBox_CheckedChanged" IsHitTestVisible="False" Focusable="False"/>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                        <GridViewColumn DisplayMemberBinding="{Binding ID}" Header="ID" />
                        <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name" />
                    </GridView.Columns>
                </GridView>                  
            </ListView.View>

            <ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListViewItem_PreviewMouseLeftButtonDown" />

                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="true">
                            <Setter Property="Background" Value="Transparent"/>

                        </Trigger>
                        <Trigger Property="IsSelected"  Value="true">
                            <Setter Property="Background" Value="Transparent"/>
                            <Setter Property="BorderBrush"  Value="Black"/>
                        </Trigger>

                    </Style.Triggers>
                </Style>
            </ListView.ItemContainerStyle>
        </ListView>
    </Border>
</Grid>

当我选择或“鼠标悬停”一行时会产生以下效果:

MyApplication

我想移除那个光泽效果并获得完全普通“ListView”的样式:

Target Application

你能告诉我实现这一目标的最简单方法吗?

非常感谢

【问题讨论】:

    标签: wpf listview gridview styles


    【解决方案1】:

    ListViewItem 在其模板 (Controltemplate.Triggers) 中有一些花哨的触发器,这些触发器在某些条件下会改变背景(例如,对于选定的项目)。要删除它们,请设置一个没有触发器的简化模板:

    <Style TargetType="ListViewItem">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListViewItem}">
                <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" 
                        BorderThickness="{TemplateBinding BorderThickness}" 
                        Background="{TemplateBinding Background}" 
                        Padding="{TemplateBinding Padding}"
                        SnapsToDevicePixels="true">
                    <GridViewRowPresenter 
                        HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                        VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers> 
    <!-- your triggers for IsMouseOver and IsSelected -->
    </Style.Triggers> 
    

    【讨论】:

      【解决方案2】:

      您显然正在使用一些提供这种效果的自定义样式。

      您可以尝试将ListViewStyle 属性设置为{x:Null} 以使用默认样式:

      <ListView Style="{x:Null}" Name="lvUsers" Background="Transparent" Foreground="White" Margin="3" FontSize="12" SelectionChanged="lvUsers_SelectionChanged">
      ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-20
        • 1970-01-01
        • 1970-01-01
        • 2016-03-31
        • 1970-01-01
        • 1970-01-01
        • 2013-05-11
        • 2013-06-15
        相关资源
        最近更新 更多