WPF - 选定的ListViewItem的聚焦颜色的GridView [英] WPF - selected unfocused color of ListViewItem with a GridView

查看:314
本文介绍了WPF - 选定的ListViewItem的聚焦颜色的GridView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图改变在选定 ListViewItem的是蓝色突出显示了当的ListView 的重点。我一直在试图调和在线计算器不同的答案和来源,但我还没有想通了,我需要什么样的XAML呢。我有以下几点:

I'm trying to change the default light gray highlight on a selected ListViewItem to be the blue highlight that shows up when the ListView is focused. I've been trying to reconcile different StackOverflow answers and sources online, but I haven't figured out what kind of XAML I need yet. I have the following:

<ListView ItemContainerStyle="{StaticResource checkableListViewItem}"
          SelectionMode="Multiple"
          View="{StaticResource fieldValueGridView}"/>

引用的查看资源:

<GridView x:Key="fieldValueGridView" AllowsColumnReorder="False">
    <GridViewColumn Header="Field">
        <GridViewColumn.CellTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock FontWeight="Bold" Text="{Binding Path=DisplayName}"/>
                    <TextBlock FontWeight="Bold" Text=": "/>
                </StackPanel>
            </DataTemplate>
        </GridViewColumn.CellTemplate>
    </GridViewColumn>
    <GridViewColumn Header="Value" DisplayMemberBinding="{Binding Path=FieldValue}"/>
</GridView>

和引用 ItemContainerStyle 资源:

<Style TargetType="ListViewItem" BasedOn="{StaticResource {x:Type ListViewItem}}"
       x:Key="checkableListViewItem">
    <Setter Property="IsSelected" Value="{Binding Path=IsChecked}" />
    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    <Setter Property="VerticalContentAlignment" Value="Top" />
</Style>

的ListView IsEnabled 属性确实变化,如果该事项。我想以某种方式结合&LT;的SolidColorBrush X:键={X:静态SystemColors.ControlBrushKey}颜色={X:静态SystemColors.HighlightColor}/&GT; ,或类似的东西,要突出选定 ListViewItem的 S中的在聚焦的ListView

The ListView's IsEnabled property does change, if that matters. I wanted to somehow incorporate <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{x:Static SystemColors.HighlightColor}"/>, or something similar, to highlight selected ListViewItems that are in an unfocused ListView.

我有以下的风格,但这似乎并没有影响到 ListViewItem的在我的的ListView ,和我认为 GridView控件我使用可能是原因。当我试图重写模板属性,则查看属性得到忽略,所以我的 GridView控件没有被显示。

I have the following style, but this does not seem to affect ListViewItems in my ListView, and I thought the GridView that I'm using might be the reason. When I tried to override the Template property, the View property got ignored so my GridView wasn't being displayed.

<Style TargetType="ListViewItem">
    <Style.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}"
                         Color="{x:Static SystemColors.HighlightColor}"/>
    </Style.Resources>
</Style>

如何在蓝色选定的项目突出了我的的ListView 的ListView 是重点不突出?

推荐答案

这会为没有一个GridView一个ListView工作

This will work for a ListView that doesn't have a GridView

<Style TargetType="{x:Type ListViewItem}">
    <Style.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" 
                         Color="{DynamicResource {x:Static SystemColors.HighlightColorKey}}"/>
    </Style.Resources>
</Style>

更新结果
1.Without重新使用模板时的GridView

<LinearGradientBrush x:Key="ListItemSelectedFill" EndPoint="0,1" StartPoint="0,0">
    <GradientStop Color="#FFD9F4FF" Offset="0"/>
    <GradientStop Color="#FF9BDDFB" Offset="1"/>
</LinearGradientBrush>

<Style TargetType="ListViewItem" x:Key="checkableListViewItem">
    <Setter Property="IsSelected" Value="{Binding Path=IsChecked}" />
    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    <Setter Property="VerticalContentAlignment" Value="Top" />
    <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background" Value="{StaticResource ListItemSelectedFill}" />
            <Setter Property="BorderBrush" Value="#FF98DDFB" />
        </Trigger>
        <!-- Or if you want to choose another color for unfocused
        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="IsSelected" Value="True" />
                <Condition Property="Selector.IsSelectionActive" Value="False" />
            </MultiTrigger.Conditions>
            <Setter Property="Background" Value="{StaticResource ListItemSelectedFill}" />
            <Setter Property="BorderBrush" Value="#FF98DDFB" />
        </MultiTrigger>
        -->
    </Style.Triggers>
</Style>

2。重新模板化的GridView使用时的ListViewItem。

<LinearGradientBrush x:Key="ListItemHoverFill" EndPoint="0,1" StartPoint="0,0">
    <GradientStop Color="#FFF1FBFF" Offset="0"/>
    <GradientStop Color="#FFD5F1FE" Offset="1"/>
</LinearGradientBrush>
<LinearGradientBrush x:Key="ListItemSelectedFill" EndPoint="0,1" StartPoint="0,0">
    <GradientStop Color="#FFD9F4FF" Offset="0"/>
    <GradientStop Color="#FF9BDDFB" Offset="1"/>
</LinearGradientBrush>
<LinearGradientBrush x:Key="ListItemSelectedInactiveFill" EndPoint="0,1" StartPoint="0,0">
    <GradientStop Color="#FFEEEDED" Offset="0"/>
    <GradientStop Color="#FFDDDDDD" Offset="1"/>
</LinearGradientBrush>
<LinearGradientBrush x:Key="ListItemSelectedHoverFill" EndPoint="0,1" StartPoint="0,0">
    <GradientStop Color="#FFEAF9FF" Offset="0"/>
    <GradientStop Color="#FFC9EDFD" Offset="1"/>
</LinearGradientBrush>

<Style TargetType="ListViewItem" x:Key="checkableListViewItem">
    <Setter Property="IsSelected" Value="{Binding Path=IsChecked}" />
    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    <Setter Property="VerticalContentAlignment" Value="Top" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListViewItem}">
                <Border CornerRadius="2" SnapsToDevicePixels="True" 
                        BorderThickness="{TemplateBinding BorderThickness}"  
                        BorderBrush="{TemplateBinding BorderBrush}"  
                        Background="{TemplateBinding Background}">
                    <Border Name="InnerBorder" CornerRadius="1" BorderThickness="1">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition MaxHeight="11" />
                                <RowDefinition />
                            </Grid.RowDefinitions>

                            <Rectangle Name="UpperHighlight" Visibility="Collapsed" Fill="#75FFFFFF" />
                            <GridViewRowPresenter Grid.RowSpan="2"  
                                                    VerticalAlignment="{TemplateBinding VerticalContentAlignment}"  
                                                    SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                        </Grid>
                    </Border>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="{StaticResource ListItemHoverFill}" />
                        <Setter Property="BorderBrush" Value="#FFCCF0FF" />
                        <Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible" />
                    </Trigger>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Background" Value="{StaticResource ListItemSelectedFill}" />
                        <Setter Property="BorderBrush" Value="#FF98DDFB" />
                        <Setter TargetName="InnerBorder" Property="BorderBrush" Value="#80FFFFFF" />
                        <Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible" />
                        <Setter TargetName="UpperHighlight" Property="Fill" Value="#40FFFFFF" />
                    </Trigger>
                    <!--<MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsSelected" Value="True" />
                            <Condition Property="Selector.IsSelectionActive" Value="False" />
                        </MultiTrigger.Conditions>
                        <Setter Property="Background" Value="{StaticResource ListItemSelectedInactiveFill}" />
                        <Setter Property="BorderBrush" Value="#FFCFCFCF" />
                    </MultiTrigger>-->
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsSelected" Value="True" />
                            <Condition Property="IsMouseOver" Value="True" />
                        </MultiTrigger.Conditions>
                        <Setter Property="Background" Value="{StaticResource ListItemSelectedHoverFill}" />
                        <Setter Property="BorderBrush" Value="#FF98DDFB" />
                    </MultiTrigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

这篇关于WPF - 选定的ListViewItem的聚焦颜色的GridView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆