开发者

WPF - change selection style for lists in WPF application to default Windows 7 style

开发者 https://www.devze.com 2023-02-21 17:31 出处:网络
I have a problem in my WPF application with selection style on list elements. Every list i WPF get dark blue background color and white text color.

I have a problem in my WPF application with selection style on list elements. Every list i WPF get dark blue background color and white text color.

  1. Why is the default Windows 7 selection style (e.g. Windows Explorer file selection) NOT a default selection style in a WPF application on Windows 7?

  2. How can I change the selection style in WPF to the default Windows 7 Aero style?

So far I have this in my global resource dictionary. But I still need border with rounding around the brush to get it look similar. Any idea how to extend this or any other suggestions for how I can apply the default Windows 7 selection style?

<LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" StartPoint="0,0" EndPoint="0,1"开发者_C百科>
<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>


I have a blog entry that describes how to apply the Windows 7 look to a ListBox here. The ListView and TreeView are also covered, but are not fully themed to the Windows 7 look.

The relevant resources that you'd need to include are:

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

精彩评论

暂无评论...
验证码 换一张
取 消