car*_*mer 6 wpf rendering colors opacity
我在理解WPF中的不透明度时遇到了问题.我在下面发布了代码.我的问题是:
我希望,当我用颜色选择器窥探颜色时,黑色和50%的不透明度会渲染#7F7F7F,但我会得到#C2C2C2用于较小的TextBlock,而预期的#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>
Run Code Online (Sandbox Code Playgroud)
您可以通过设置整个 TextBlock 的不透明度来使用解决方法。当然,这也会改变背刷的不透明度,因此如果您有不同的 StackPanel 背景颜色,它可能不会给出所需的效果。
<TextBlock Text="Click me" HorizontalAlignment="Center" Style="{StaticResource TextBlockStyle}" Opacity="0.5"/>
Run Code Online (Sandbox Code Playgroud)
但也可以覆盖文本块的 ControlTemplate 并将不透明度属性仅连接到前景。
或者您可以在 TextBlock 内部创建一个 Grid,这样您就可以在 TextBlock 上设置不透明度属性,而无需触摸它所在的矩形的背景。