WPF remove glossy effect from selection/mouse over of a GridView

断了今生、忘了曾经 提交于 2019-12-23 16:27:39

问题


I've searched an answer to this simple question but didn't find a solution yet. I have the following code:

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

that results in the following effect when I select or "mouse over" a row:

MyApplication

I want to remove that glossy effect and obtain exactly the style of a plain "ListView":

Target Application

Can you tell me the easiest way to achive this?

Thank you very much


回答1:


ListViewItem has some fancy triggers in its Template (Controltemplate.Triggers) which change background under some conditions (e.g. for selected items). To remove them set a simplified Template, without 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:


You are obviously using some custom style that provides this effect.

You could try to set the Style property of the ListView to {x:Null} to use the default style:

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


来源:https://stackoverflow.com/questions/42200775/wpf-remove-glossy-effect-from-selection-mouse-over-of-a-gridview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!