gpt4 book ai didi

wpf - WPF 字体中不可预测的不透明度行为

转载 作者:行者123 更新时间:2023-12-04 15:52:53 24 4
gpt4 key购买 nike

我在理解 WPF 中的不透明度时遇到问题。我在下面发布了代码。我的问题是:

  • 为什么矩形和字体的颜色不同?
  • 当我更改字体大小时,为什么两个 TextBlock 的颜色不同?

  • 我希望,当我用颜色选择器窥探颜色时,不透明度为 50% 的黑色将呈现 #7F7F7F,但相反,对于较小的 TextBlock,我得到了 #C2C2C2,对于较大的字体和矩形,我得到了预期的 #7F7F7F .

    问题已在 https://github.com/ButchersBoy/MaterialDesignInXamlToolkit/issues/408 部分提出但没有正确回答。

    任何帮助表示赞赏!

    代码是:
    <Window x:Class="WpfPlay.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfPlay"
    mc:Ignorable="d"
    Title="MainWindow" Height="800" Width="800" Background="White">

    <Window.Resources>
    <SolidColorBrush x:Key="ForeBrush" Color="Black" Opacity="0.5"/>
    <SolidColorBrush x:Key="BackBrush" Color="White" Opacity="1.0"/>
    <Style TargetType="TextBlock" x:Key="TextBlockStyle">
    <Setter Property="Foreground" Value="{StaticResource ForeBrush}"/>
    <Setter Property="Background" Value="{StaticResource BackBrush}"/>
    <Setter Property="FontSize" Value="48"/>
    <Setter Property="FontWeight" Value="Bold"/>
    </Style>

    <Style TargetType="TextBlock" x:Key="TextBlockLargeStyle">
    <Setter Property="Foreground" Value="{StaticResource ForeBrush}"/>
    <Setter Property="Background" Value="{StaticResource BackBrush}"/>
    <Setter Property="FontSize" Value="100"/>
    <Setter Property="FontWeight" Value="Bold"/>
    </Style>
    </Window.Resources>

    <StackPanel Orientation="Vertical" Background="White">
    <TextBlock Text="Click me" HorizontalAlignment="Center" Style="{StaticResource TextBlockStyle}" Margin="20"/>
    <TextBlock Text="Click me" HorizontalAlignment="Center" Style="{StaticResource TextBlockLargeStyle}" Margin="20"/>
    <Rectangle Width="100" Height="100" HorizontalAlignment="Center" Margin="20" Fill="{StaticResource ForeBrush}"/>
    </StackPanel>
    </Window>

    最佳答案

    您可以通过在完整的 TextBlock 上设置不透明度来使用解决方法。这当然也会改变背刷的不透明度,因此如果您有不同的 StackPanel 背景颜色,它可能无法提供所需的效果。

    <TextBlock Text="Click me" HorizontalAlignment="Center" Style="{StaticResource TextBlockStyle}" Opacity="0.5"/>

    但也有可能覆盖文本块的 ControlTemplate 并将不透明度属性仅连接到前景。

    或者您可以在 TextBlock 内部创建一个 Grid,这样您就可以在 TextBlock 上设置 opacity 属性,而无需触及它所在矩形的背景。

    关于wpf - WPF 字体中不可预测的不透明度行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42761385/

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