在ListView中禁用/更改悬停的颜色

时间:2013-08-01 13:21:29

标签: c# wpf listview gridview

我目前在listview中使用带有gridview的wpf。我可以使用下面的代码更改GridViewColumnHeader。但是我尝试使用相同的<ListView.Resources>标签更改悬停选项的颜色/禁用,但它不起作用。它目前正在给我一个我不想要的浅蓝色的默认鼠标。

<ListView Margin="10,53,10,65" Name="listView" Background=" black" Foreground="White" BorderThickness="0">
        <ListView.Resources>
            <Style TargetType="GridViewColumnHeader">
                <Setter Property="Background" Value="Black" />
                <Setter Property="Foreground" Value="White" />
            </Style>
        </ListView.Resources>
        <ListView.View>
            <GridView x:Name="gridView" >
                <GridView.Columns>
                    <GridViewColumn  Width="120" DisplayMemberBinding="{Binding Time}" >
                        <GridViewColumn.Header>
                            <GridViewColumnHeader Tag="Time" Click="lvUsersColumnHeader_Click">Accessed Time</GridViewColumnHeader>
                        </GridViewColumn.Header>
                    </GridViewColumn>
                    <GridViewColumn Header="Username" Width="100" DisplayMemberBinding="{Binding UserName}" ></GridViewColumn>
                    <GridViewColumn Header="Location" Width="250" DisplayMemberBinding="{Binding Address}" ></GridViewColumn>
                    <GridViewColumn Header="File Accessed" Width="100" DisplayMemberBinding="{Binding FileName}" ></GridViewColumn>
                    <GridViewColumn Header="Remarks" Width="155" DisplayMemberBinding="{Binding Remarks}" ></GridViewColumn>
                </GridView.Columns>
            </GridView>
        </ListView.View>
    </ListView>

1 个答案:

答案 0 :(得分:0)

要覆盖任何控件的默认行为(例如ListView),您必须定义ControlTemplate并且有触发器来设置属性。例如:

<Style x:Key="{x:Type GridViewColumnHeader}" TargetType="{x:Type GridViewColumnHeader}">
    <Setter Property="HorizontalContentAlignment" Value="Center" />
    <Setter Property="VerticalContentAlignment" Value="Center" />
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
                <Grid>
                ....

没有它,系统将采用默认主题的触发器(以及其余行为),它们有自己的样式和模板。

要验证这一点,您可以下载MSDN上任何控件的样式/模板示例。 ListView的样式示例可用here

Note: 只需将内容放入Resources即可。最好将样式放入文件App.xamlResourceDictionary

你的样式MSDN(有点大,所以你必须自己决定删除什么以及留下什么样的风格):

    <ListView Margin="10,53,10,65" Name="gridview1" Background="Black" Foreground="White" BorderThickness="0">
        <ListView.Resources>
            <Color x:Key="WindowColor">#FFE8EDF9</Color>
            <Color x:Key="ContentAreaColorLight">#FFC5CBF9</Color>
            <Color x:Key="ContentAreaColorDark">#FF7381F9</Color>

            <Color x:Key="DisabledControlLightColor">#FFE8EDF9</Color>
            <Color x:Key="DisabledControlDarkColor">#FFC5CBF9</Color>
            <Color x:Key="DisabledForegroundColor">#FF888888</Color>

            <Color x:Key="SelectedBackgroundColor">#FFC5CBF9</Color>
            <Color x:Key="SelectedUnfocusedColor">#FFDDDDDD</Color>

            <Color x:Key="ControlLightColor">White</Color>
            <Color x:Key="ControlMediumColor">#FF7381F9</Color>
            <Color x:Key="ControlDarkColor">#FF211AA9</Color>

            <Color x:Key="ControlMouseOverColor">#FF3843C4</Color>
            <Color x:Key="ControlPressedColor">#FF211AA9</Color>


            <Color x:Key="GlyphColor">#FF444444</Color>
            <Color x:Key="GlyphMouseOver">sc#1, 0.004391443, 0.002428215, 0.242281124</Color>

            <!--Border colors-->
            <Color x:Key="BorderLightColor">#FFCCCCCC</Color>
            <Color x:Key="BorderMediumColor">#FF888888</Color>
            <Color x:Key="BorderDarkColor">#FF444444</Color>

            <Color x:Key="PressedBorderLightColor">#FF888888</Color>
            <Color x:Key="PressedBorderDarkColor">#FF444444</Color>

            <Color x:Key="DisabledBorderLightColor">#FFAAAAAA</Color>
            <Color x:Key="DisabledBorderDarkColor">#FF888888</Color>

            <Color x:Key="DefaultBorderBrushDarkColor">Black</Color>

            <!--Control-specific resources.-->
            <Color x:Key="HeaderTopColor">#FFC5CBF9</Color>
            <Color x:Key="DatagridCurrentCellBorderColor">Black</Color>
            <Color x:Key="SliderTrackDarkColor">#FFC5CBF9</Color>

            <Color x:Key="NavButtonFrameColor">#FF3843C4</Color>

            <LinearGradientBrush x:Key="MenuPopupBrush" EndPoint="0.5,1" StartPoint="0.5,0">
                <GradientStop Color="{DynamicResource ControlLightColor}" Offset="0" />
                <GradientStop Color="{DynamicResource ControlMediumColor}" Offset="0.5" />
                <GradientStop Color="{DynamicResource ControlLightColor}" Offset="1" />
            </LinearGradientBrush>

            <LinearGradientBrush x:Key="ProgressBarIndicatorAnimatedFill" StartPoint="0,0" EndPoint="1,0">
                <LinearGradientBrush.GradientStops>
                    <GradientStopCollection>
                        <GradientStop Color="#000000FF" Offset="0" />
                        <GradientStop Color="#600000FF" Offset="0.4" />
                        <GradientStop Color="#600000FF" Offset="0.6" />
                        <GradientStop Color="#000000FF" Offset="1" />
                    </GradientStopCollection>
                </LinearGradientBrush.GradientStops>
            </LinearGradientBrush>

            <Style x:Key="GridViewColumnHeaderGripper" TargetType="Thumb">
                <Setter Property="Width" Value="18" />
                <Setter Property="Background">
                    <Setter.Value>
                        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                            <LinearGradientBrush.GradientStops>
                                <GradientStopCollection>
                                    <GradientStop Color="{DynamicResource BorderLightColor}" Offset="0.0" />
                                    <GradientStop Color="{DynamicResource BorderDarkColor}" Offset="1.0" />
                                </GradientStopCollection>
                            </LinearGradientBrush.GradientStops>
                        </LinearGradientBrush>
                    </Setter.Value>
                </Setter>

                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Thumb}">
                            <Border Padding="{TemplateBinding Padding}" Background="Transparent">
                                <Rectangle HorizontalAlignment="Center" Width="1" Fill="{TemplateBinding Background}" />
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>

                <Setter Property="BorderBrush">
                    <Setter.Value>
                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                            <GradientStop Color="Black" Offset="0" />
                            <GradientStop Color="White" Offset="1" />
                        </LinearGradientBrush>
                    </Setter.Value>
                </Setter>
            </Style>

            <Style x:Key="{x:Type GridViewColumnHeader}" TargetType="GridViewColumnHeader">
                <Setter Property="HorizontalContentAlignment" Value="Center" />
                <Setter Property="VerticalContentAlignment" Value="Center" />
                <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" />

                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="GridViewColumnHeader">
                            <Grid>
                                <VisualStateManager.VisualStateGroups>
                                    <VisualStateGroup x:Name="CommonStates">
                                        <VisualState x:Name="Normal" />
                                        <VisualState x:Name="MouseOver">
                                            <Storyboard>
                                                <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(GradientBrush.GradientStops)[1].(GradientStop.Color)" Storyboard.TargetName="HeaderBorder">
                                                    <EasingColorKeyFrame KeyTime="0" Value="{StaticResource ControlMouseOverColor}" />
                                                </ColorAnimationUsingKeyFrames>
                                            </Storyboard>
                                        </VisualState>

                                        <VisualState x:Name="Pressed" />
                                        <VisualState x:Name="Disabled" />
                                    </VisualStateGroup>
                                </VisualStateManager.VisualStateGroups>

                                <Border x:Name="HeaderBorder" BorderThickness="0,1,0,1" Padding="2,0,2,0">
                                    <Border.BorderBrush>
                                        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                            <LinearGradientBrush.GradientStops>
                                                <GradientStopCollection>
                                                    <GradientStop Color="{DynamicResource BorderLightColor}" Offset="0.0" />
                                                    <GradientStop Color="{DynamicResource BorderDarkColor}" Offset="1.0" />
                                                </GradientStopCollection>
                                            </LinearGradientBrush.GradientStops>
                                        </LinearGradientBrush>
                                    </Border.BorderBrush>

                                    <Border.Background>
                                        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                            <LinearGradientBrush.GradientStops>
                                                <GradientStopCollection>
                                                    <GradientStop Color="{DynamicResource ControlLightColor}" Offset="0.0" />
                                                    <GradientStop Color="{DynamicResource ControlMediumColor}" Offset="1.0" />
                                                </GradientStopCollection>
                                            </LinearGradientBrush.GradientStops>
                                        </LinearGradientBrush>
                                    </Border.Background>

                                    <ContentPresenter x:Name="HeaderContent" Margin="0,0,0,1" RecognizesAccessKey="True" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                                </Border>

                                <Thumb x:Name="PART_HeaderGripper" HorizontalAlignment="Right" Margin="0,0,-9,0" Style="{StaticResource GridViewColumnHeaderGripper}" />
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>

                <Style.Triggers>
                    <Trigger Property="Role" Value="Floating">
                        <Setter Property="Opacity" Value="0.7" />

                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="GridViewColumnHeader">
                                    <Canvas Name="PART_FloatingHeaderCanvas">
                                        <Rectangle Fill="#60000000" Width="{TemplateBinding ActualWidth}" Height="{TemplateBinding ActualHeight}" />
                                    </Canvas>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Trigger>

                    <Trigger Property="Role" Value="Padding">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="GridViewColumnHeader">
                                    <Border Name="HeaderBorder" BorderThickness="0,1,0,1">
                                        <Border.Background>
                                            <SolidColorBrush Color="{DynamicResource ControlLightColor}" />
                                        </Border.Background>
                                        <Border.BorderBrush>
                                            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                                <LinearGradientBrush.GradientStops>
                                                    <GradientStopCollection>
                                                        <GradientStop Color="{DynamicResource BorderLightColor}" Offset="0.0" />
                                                        <GradientStop Color="{DynamicResource BorderDarkColor}" Offset="1.0" />
                                                    </GradientStopCollection>
                                                </LinearGradientBrush.GradientStops>
                                            </LinearGradientBrush>
                                        </Border.BorderBrush>
                                    </Border>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ListView.Resources>

        <ListView.View>
            <GridView x:Name="gridView">
                <GridView.Columns>
                    <GridViewColumn Width="120" DisplayMemberBinding="{Binding Time}" >
                        <GridViewColumn.Header>
                            <GridViewColumnHeader Tag="Time">Accessed Time</GridViewColumnHeader>
                        </GridViewColumn.Header>
                    </GridViewColumn>

                    <GridViewColumn Header="Username" Width="100" DisplayMemberBinding="{Binding UserName}" ></GridViewColumn>
                    <GridViewColumn Header="Location" Width="250" DisplayMemberBinding="{Binding Address}" ></GridViewColumn>
                    <GridViewColumn Header="File Accessed" Width="100" DisplayMemberBinding="{Binding FileName}" ></GridViewColumn>
                    <GridViewColumn Header="Remarks" Width="155" DisplayMemberBinding="{Binding Remarks}" ></GridViewColumn>
                </GridView.Columns>
            </GridView>
        </ListView.View>
    </ListView>