代码之家  ›  专栏  ›  技术社区  ›  Sarah Vessels

wpf-使用GridView选定的ListViewItem的未聚焦颜色

  •  8
  • Sarah Vessels  · 技术社区  · 14 年前

    我正在尝试更改选定对象的默认浅灰色突出显示 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>
    

    这个 列表视图 IsEnabled 如果这很重要,财产确实会改变。我想以某种方式融入 <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="{x:Static SystemColors.HighlightColor}"/> 或类似的东西,突出显示选中的 列表视图项 没有焦点的 列表视图 .

    我有以下风格,但这似乎不影响 列表视图项 在我的 列表视图 我觉得 GridView 我使用的可能是原因。当我试图超越 Template 财产 视图 属性被忽略,所以我的 网格视图 没有显示。

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

    如何用蓝色突出显示我的 列表视图 什么时候 列表视图 没有焦点吗?

    1 回复  |  直到 14 年前
        1
  •  8
  •   Fredrik Hedblad    14 年前

    这对没有网格视图的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>