WPF - 将WPF应用程序中列表的选择样式更改为默认的Windows 7样式

时间:2011-03-31 11:02:31

标签: wpf selection aero

我的WPF应用程序中存在一个问题,列表元素上有选择样式。我WPF的每个列表都有深蓝色背景颜色和白色文字颜色。

  1. 为什么默认的Windows 7选择样式(例如Windows资源管理器文件选择)不是Windows 7上WPF应用程序的默认选择样式?

  2. 如何将WPF中的选择样式更改为默认的Windows 7 Aero样式?

  3. 到目前为止,我在全球资源词典中都有这个。但是我仍然需要在画笔周围进行四舍五入以使它看起来相似。知道如何扩展这个或任何其他建议我如何应用默认的Windows 7选择样式?

    <LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" StartPoint="0,0" EndPoint="0,1">
    <LinearGradientBrush.GradientStops>
        <GradientStop Offset="0" Color="#FFE3F4FC"/>
        <GradientStop Offset="0.38" Color="#FFD8EFFC"/>
        <GradientStop Offset="0.38" Color="#FFBEE6FD"/>
        <GradientStop Offset="1" Color="#FFA6D9F4"/>
    </LinearGradientBrush.GradientStops> </LinearGradientBrush>
    
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"></SolidColorBrush>
    

1 个答案:

答案 0 :(得分:5)

我有一个博客条目,介绍如何将Windows 7外观应用于ListBox here。 ListView和TreeView也有所涉及,但并不完全以Windows 7外观为主题。

您需要包含的相关资源包括:

<!-- Hover Brushes -->
<LinearGradientBrush x:Key="HoverBackgroundBrushKey"
                        StartPoint="0,0"
                        EndPoint="0,1">
    <GradientStop Color="#FCFCFC"
                    Offset="0" />
    <GradientStop Color="#EBF3FD"
                    Offset="1" />
</LinearGradientBrush>
<SolidColorBrush x:Key="HoverOuterBorderBrushKey"
                    Color="#B8D6FB" />
<SolidColorBrush x:Key="HoverInnerBorderBrushKey"
                    Color="#F2F7FE" />

<!-- Selected (Active) Brushes -->
<LinearGradientBrush x:Key="SelectedActiveBackgroundBrushKey"
                        StartPoint="0,0"
                        EndPoint="0,1">
    <GradientStop Color="#DCEBFC"
                    Offset="0" />
    <GradientStop Color="#C1DBFC"
                    Offset="1" />
</LinearGradientBrush>
<SolidColorBrush x:Key="SelectedActiveOuterBorderBrushKey"
                    Color="#7DA2CE" />
<SolidColorBrush x:Key="SelectedActiveInnerBorderBrushKey"
                    Color="#EBF4FD" />

<!-- Selected (Inactive) Brushes -->
<LinearGradientBrush x:Key="SelectedInactiveBackgroundBrushKey"
                        StartPoint="0,0"
                        EndPoint="0,1">
    <GradientStop Color="#F8F8F8"
                    Offset="0" />
    <GradientStop Color="#E5E5E5"
                    Offset="1" />
</LinearGradientBrush>
<SolidColorBrush x:Key="SelectedInactiveOuterBorderBrushKey"
                    Color="#D9D9D9" />
<SolidColorBrush x:Key="SelectedInactiveInnerBorderBrushKey"
                    Color="#F0F0F0" />

<!-- ListBoxItem Style -->
<Style x:Key="{x:Type ListBoxItem}"
        TargetType="{x:Type ListBoxItem}">
    <Setter Property="BorderThickness"
            Value="1" />
    <Setter Property="Padding"
            Value="2,0" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListBoxItem}">
                <Grid>
                    <Border x:Name="outerBorder"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}"
                            CornerRadius="2"
                            SnapsToDevicePixels="true">
                        <Border x:Name="innerBorder"
                                Background="{TemplateBinding Background}"
                                BorderThickness="1"
                                CornerRadius="1"
                                Padding="{TemplateBinding Padding}"
                                SnapsToDevicePixels="true">
                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                                SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                        </Border>
                    </Border>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver"
                                Value="true">
                        <Setter TargetName="outerBorder"
                                Property="BorderBrush"
                                Value="{StaticResource HoverOuterBorderBrushKey}" />
                        <Setter TargetName="innerBorder"
                                Property="Background"
                                Value="{StaticResource HoverBackgroundBrushKey}" />
                        <Setter TargetName="innerBorder"
                                Property="BorderBrush"
                                Value="{StaticResource HoverInnerBorderBrushKey}" />
                    </Trigger>
                    <Trigger Property="IsSelected"
                                Value="true">
                        <Setter TargetName="outerBorder"
                                Property="BorderBrush"
                                Value="{StaticResource SelectedActiveOuterBorderBrushKey}" />
                        <Setter TargetName="innerBorder"
                                Property="Background"
                                Value="{StaticResource SelectedActiveBackgroundBrushKey}" />
                        <Setter TargetName="innerBorder"
                                Property="BorderBrush"
                                Value="{StaticResource SelectedActiveInnerBorderBrushKey}" />
                    </Trigger>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsSelected"
                                        Value="true" />
                            <Condition Property="Selector.IsSelectionActive"
                                        Value="false" />
                        </MultiTrigger.Conditions>
                        <Setter TargetName="outerBorder"
                                Property="BorderBrush"
                                Value="{StaticResource SelectedInactiveOuterBorderBrushKey}" />
                        <Setter TargetName="innerBorder"
                                Property="Background"
                                Value="{StaticResource SelectedInactiveBackgroundBrushKey}" />
                        <Setter TargetName="innerBorder"
                                Property="BorderBrush"
                                Value="{StaticResource SelectedInactiveInnerBorderBrushKey}" />
                    </MultiTrigger>
                    <Trigger Property="IsEnabled"
                                Value="false">
                        <Setter Property="Foreground"
                                Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<!-- ListViewItem Style -->
<Style x:Key="{x:Type ListViewItem}"
        TargetType="{x:Type ListViewItem}"
        BasedOn="{StaticResource {x:Type ListBoxItem}}" />

<!-- Supporting TreeViewItem Resources -->
<PathGeometry x:Key="TreeArrow">
    <PathGeometry.Figures>
        <PathFigureCollection>
            <PathFigure IsFilled="True"
                        StartPoint="0 0"
                        IsClosed="True">
                <PathFigure.Segments>
                    <PathSegmentCollection>
                        <LineSegment Point="0 6" />
                        <LineSegment Point="6 0" />
                    </PathSegmentCollection>
                </PathFigure.Segments>
            </PathFigure>
        </PathFigureCollection>
    </PathGeometry.Figures>
</PathGeometry>
<Style x:Key="ExpandCollapseToggleStyle"
        TargetType="{x:Type ToggleButton}">
    <Setter Property="Focusable"
            Value="False" />
    <Setter Property="Width"
            Value="16" />
    <Setter Property="Height"
            Value="16" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ToggleButton}">
                <Border Width="16"
                        Height="16"
                        Background="Transparent"
                        Padding="5,5,5,5">
                    <Path x:Name="ExpandPath"
                            Fill="Transparent"
                            Stroke="#FF989898"
                            Data="{StaticResource TreeArrow}">
                        <Path.RenderTransform>
                            <RotateTransform Angle="135"
                                                CenterX="3"
                                                CenterY="3" />
                        </Path.RenderTransform>
                    </Path>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver"
                                Value="True">
                        <Setter TargetName="ExpandPath"
                                Property="Stroke"
                                Value="#FF1BBBFA" />
                        <Setter TargetName="ExpandPath"
                                Property="Fill"
                                Value="Transparent" />
                    </Trigger>

                    <Trigger Property="IsChecked"
                                Value="True">
                        <Setter TargetName="ExpandPath"
                                Property="RenderTransform">
                            <Setter.Value>
                                <RotateTransform Angle="180"
                                                    CenterX="3"
                                                    CenterY="3" />
                            </Setter.Value>
                        </Setter>
                        <Setter TargetName="ExpandPath"
                                Property="Fill"
                                Value="#FF595959" />
                        <Setter TargetName="ExpandPath"
                                Property="Stroke"
                                Value="#FF262626" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<!-- TreeViewItem Style -->
<Style x:Key="{x:Type TreeViewItem}"
        TargetType="{x:Type TreeViewItem}">
    <Setter Property="BorderThickness"
            Value="1" />
    <Setter Property="Padding"
            Value="2,0" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TreeViewItem}">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition MinWidth="19"
                                            Width="Auto" />
                        <ColumnDefinition Width="Auto" />
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                        <RowDefinition />
                    </Grid.RowDefinitions>
                    <ToggleButton x:Name="expander"
                                    Style="{StaticResource ExpandCollapseToggleStyle}"
                                    IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource TemplatedParent}}"
                                    ClickMode="Press" />
                    <Border x:Name="outerBorder"
                            Grid.Column="1"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}"
                            CornerRadius="2"
                            SnapsToDevicePixels="true">
                        <Border x:Name="innerBorder"
                                Background="{TemplateBinding Background}"
                                BorderThickness="1"
                                CornerRadius="1"
                                Padding="{TemplateBinding Padding}"
                                SnapsToDevicePixels="true">
                            <ContentPresenter x:Name="PART_Header"
                                                ContentSource="Header"
                                                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                        </Border>
                    </Border>
                    <ItemsPresenter x:Name="itemsHost"
                                    Grid.Row="1"
                                    Grid.Column="1"
                                    Grid.ColumnSpan="2" />
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsExpanded"
                                Value="false">
                        <Setter TargetName="itemsHost"
                                Property="Visibility"
                                Value="Collapsed" />
                    </Trigger>
                    <Trigger Property="HasItems"
                                Value="false">
                        <Setter TargetName="expander"
                                Property="Visibility"
                                Value="Hidden" />
                    </Trigger>
                    <Trigger SourceName="outerBorder"
                                Property="IsMouseOver"
                                Value="true">
                        <Setter TargetName="outerBorder"
                                Property="BorderBrush"
                                Value="{StaticResource HoverOuterBorderBrushKey}" />
                        <Setter TargetName="innerBorder"
                                Property="Background"
                                Value="{StaticResource HoverBackgroundBrushKey}" />
                        <Setter TargetName="innerBorder"
                                Property="BorderBrush"
                                Value="{StaticResource HoverInnerBorderBrushKey}" />
                    </Trigger>
                    <Trigger Property="IsSelected"
                                Value="true">
                        <Setter TargetName="outerBorder"
                                Property="BorderBrush"
                                Value="{StaticResource SelectedActiveOuterBorderBrushKey}" />
                        <Setter TargetName="innerBorder"
                                Property="Background"
                                Value="{StaticResource SelectedActiveBackgroundBrushKey}" />
                        <Setter TargetName="innerBorder"
                                Property="BorderBrush"
                                Value="{StaticResource SelectedActiveInnerBorderBrushKey}" />
                    </Trigger>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsSelected"
                                        Value="true" />
                            <Condition Property="Selector.IsSelectionActive"
                                        Value="false" />
                        </MultiTrigger.Conditions>
                        <Setter TargetName="outerBorder"
                                Property="BorderBrush"
                                Value="{StaticResource SelectedInactiveOuterBorderBrushKey}" />
                        <Setter TargetName="innerBorder"
                                Property="Background"
                                Value="{StaticResource SelectedInactiveBackgroundBrushKey}" />
                        <Setter TargetName="innerBorder"
                                Property="BorderBrush"
                                Value="{StaticResource SelectedInactiveInnerBorderBrushKey}" />
                    </MultiTrigger>
                    <Trigger Property="IsEnabled"
                                Value="false">
                        <Setter Property="Foreground"
                                Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>