gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:29:23 26 4
gpt4 key购买 nike

我的 WPF 应用程序中的列表元素选择样式有问题。我 WPF 的每个列表都获得深蓝色背景颜色和白色文本颜色。

  • 为什么默认的 Windows 7 选择样式(例如 Windows 资源管理器文件选择)不是 Windows 7 上的 WPF 应用程序中的默认选择样式?
  • 如何将 WPF 中的选择样式更改为默认的 Windows 7 Aero 样式?

  • 到目前为止,我的全局资源词典中有这个。但是我仍然需要在画笔周围进行四舍五入以使其看起来相似。知道如何扩展这个或任何其他关于如何应用默认 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>

    最佳答案

    我有一篇博客文章描述了如何将 Windows 7 外观应用于列表框 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>

    关于WPF - 将 WPF 应用程序中列表的选择样式更改为默认的 Windows 7 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5498794/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com