簡體   English   中英

WPF 渲染顏色與畫筆和控制元素上的不透明度不一致

[英]WPF Rendered Color inconsistency with Opacity on Brush and Control Elements

考慮以下 xaml。

<Window x:Class="PlayTabControl.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <ResourceDictionary>
            <Color x:Key="HintColor" A="255" R="0" G="0" B="0"></Color>
            <SolidColorBrush x:Key="HintColorBrush" Color="{DynamicResource HintColor}" Opacity="0.26"/>
        </ResourceDictionary>
    </Window.Resources>
    <StackPanel Background="White">
        <TextBlock FontSize="28" FontWeight="ExtraBlack"
                    Text="Hello World, #42000000" 
                    Foreground="#42000000"
                    HorizontalAlignment="Center"/>
        <TextBlock FontSize="28" FontWeight="ExtraBlack"
                    Foreground="{StaticResource HintColorBrush}"
                    Text="Hello World, HintColorBrush @ 0.26" 
                    HorizontalAlignment="Center"/>
        <TextBlock FontSize="28" FontWeight="ExtraBlack"
                Text="Hello World, #68000000" 
                Foreground="#68000000"
                HorizontalAlignment="Center"/>
        <TextBlock FontSize="28" FontWeight="ExtraBlack"
                    Foreground="Black"
                    Opacity="0.26"
                    Text="Hello World, Black TB@0.26" 
                    HorizontalAlignment="Center"/>
        <TextBlock FontSize="28" FontWeight="ExtraBlack"
                    Foreground="#FFbdbdbd"
                    Text="Hello World, #FFbdbdbd" 
                    HorizontalAlignment="Center"/>        
    </StackPanel>
</Window>

它產生以下結果:

在此處輸入圖片說明

從中得出的觀察結果是 Line1 和 Line2 的顏色不同。 第 3 行在視覺上是正確的,但在顏色輸入方面在數字上是錯誤的。 這是對每行 Textblock 所做的操作。

  1. #42000000 的硬編碼前景色。 這大約是 26% 的不透明度。 結果:不正確
  2. 刷不透明度為0.26的資源,顏色設置為黑色有效。 結果:不正確
  3. 產生相同感知輸出的更正數字。 理論上是 40.6% 的不透明度。
  4. 使用 Textblock 的 Opacity 0.26。 結果:正確
  5. #FFbdbdbd 的硬編碼顏色,不涉及透明度。 結果:正確

我的問題是:什么/為什么 wpf 以不同的方式呈現? 當設計師的示例/屏幕截​​圖關注透明度時,這使得很難可靠地進行顏色樣式設置。

請注意,出於好奇,我也在 Windows 商店應用程序上完成了此操作。 結果是我所期望的,除了 Line3 之外,所有顏色都相同,它現在會更暗,因為它更不透明。

如果有人也偶然發現了這個問題,似乎將TextOptions.TextFormattingMode設置為Display似乎可以解決這個問題(您可以在窗口級別設置它以影響所有內容)。 不過,這確實會稍微改變文本渲染布局,因此請考慮到這一點。 有關不同之處的更多信息,請參閱this

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM