【问题标题】:WPF - selected unfocused color of ListViewItem with a GridViewWPF - 使用 GridView 选择 ListViewItem 的未聚焦颜色
【发布时间】:2011-05-12 04:34:16
【问题描述】:

我正在尝试将选定ListViewItem 上的默认浅灰色突出显示更改为ListView 聚焦时显示的蓝色突出显示。我一直在尝试在线协调不同的 StackOverflow 答案和来源,但我还没有弄清楚我需要什么样的 XAML。我有以下内容:

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

引用的View资源是:

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

ListViewIsEnabled 属性确实会发生变化,如果这很重要的话。我想以某种方式合并 &lt;SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{x:Static SystemColors.HighlightColor}"/&gt; 或类似的东西,以突出显示在未集中注意力的 ListView 中的选定 ListViewItems。

我有以下风格,但这似乎不会影响我的ListView 中的ListViewItems,我认为我正在使用的GridView 可能是原因。当我尝试覆盖 Template 属性时,View 属性被忽略,所以我的 GridView 没有被显示。

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

ListView 没有焦点时,如何以蓝色突出显示ListView 中的选定项目?

【问题讨论】:

    标签: wpf templates xaml listview gridview


    【解决方案1】:

    这适用于没有 GridView 的 ListView

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

    更新
    1.使用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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-16
      • 2020-11-03
      • 2015-12-04
      • 2019-04-17
      • 2017-04-25
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多