gpt4 book ai didi

wpf - 为什么 WPF 主题不使用 SystemColors?

转载 作者:行者123 更新时间:2023-12-02 07:29:47 26 4
gpt4 key购买 nike

查看可用于 WPF 的各种开源主题,我有点惊讶地发现颜色未映射到系统颜色。因此,如果您更改整体系统配置,这些主题将不会更改以适应。

是否有正确使用系统颜色的主题,如果有,如何编写利用这些颜色的按钮样式?

举个例子,下面是按钮的样式:

    <Style x:Key="specialButton" TargetType="Button">
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="FocusVisualStyle" Value="{StaticResource ButtonFocusVisual}"/>
<Setter Property="Background" Value="{StaticResource NormalBrush}"/>
<Setter Property="Margin" Value="2"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Name="border"
BorderThickness="1"
Background="{TemplateBinding Background}"
BorderBrush="{StaticResource NormalBorderBrush}"
Padding="1,1">
<ContentPresenter Name="content" HorizontalAlignment="Center" VerticalAlignment="Center" RecognizesAccessKey="True"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="border" Property="BorderBrush" Value="{StaticResource DarkBrush}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="border" Property="Background" Value="{StaticResource PressedBrush}"/>
<Setter TargetName="border" Property="BorderBrush" Value="{StaticResource PressedBorderBrush}"/>
</Trigger>
<Trigger Property="IsDefaulted" Value="True">
<Setter TargetName="border" Property="BorderBrush" Value="{StaticResource DefaultedBorderBrush}"/>
</Trigger>
<Trigger Property="IsFocused" Value="True">
<Setter TargetName="border" Property="BorderBrush" Value="{StaticResource DefaultedBorderBrush}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="border" Property="Background" Value="{StaticResource DisabledBackgroundBrush}"/>
<Setter TargetName="border" Property="BorderBrush" Value="{StaticResource DisabledBorderBrush}"/>
<Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

问题是,如何指定命名的静态资源,以便它们挂接到系统颜色中?例如,背景可能如下所示:

    <LinearGradientBrush x:Key="NormalBrush" StartPoint="0,0" EndPoint="0,1">
<GradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="{DynamicResource {x:Static SystemColors.ControlLightLightColorKey}}" Offset="0.0"/>
<GradientStop Color="{DynamicResource {x:Static SystemColors.ControlLightColorKey}}" Offset="1.0"/>
</GradientStopCollection>
</GradientBrush.GradientStops>
</LinearGradientBrush>

然而,这看起来一点也不像标准按钮。如果我使用 XAMLPAD 检查按钮,我可以看到以下内容:

     <LinearGradientBrush x:Key="NormalBrush" StartPoint="0,0" EndPoint="0,1">
<GradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="#FFF3F3F3" Offset="0.0"/>
<GradientStop Color="#FFEBEBEB" Offset="0.5"/>
<GradientStop Color="#FFDDDDDD" Offset="0.5"/>
<GradientStop Color="#FFCDCDCD" Offset="1.0"/>
</GradientStopCollection>
</GradientBrush.GradientStops>
</LinearGradientBrush>

使用的颜色似乎是常量,而不是基于系统颜色。

最佳答案

我不知道第三方主题,但系统颜色可以通过 SystemColors 在 Xaml 中使用。类(class)。此类公开可通过以下两种方式之一在 xaml 中使用的资源的键:

<Border Background="{x:Static SystemColors.ControlDarkBrushKey}" />

或者:

<Border Background="{StaticResource {x:Static SystemColors.ControlDarkBrushKey}}" />

以上任何一个都应该为您提供一个背景颜色与系统的 ControlDarkBrush 颜色相同的边框。我提供的文档链接提供了可用资源的完整列表。

值得注意的是,SystemColors 为您提供了每种可用颜色的 Brush 以及颜色本身 - 因此,如果您想创建自己的淡出画笔,将一种系统颜色转换为另一种系统颜色,您可以轻松创建。

关于wpf - 为什么 WPF 主题不使用 SystemColors?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11828587/

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