2017-03-13 2 views
6

Ich habe ein Problem, die Deckkraft in WPF zu verstehen. Ich habe den Code unten veröffentlicht. Meine Fragen sind:Unvorhersehbares Opazitätsverhalten in WPF-Schriftarten

  • Warum erhalten das Rechteck und die Schriftart unterschiedliche Farben?
  • Warum erhalten beide TextBlocks unterschiedliche Farben, wenn ich die Schriftgröße ändere?

Ich würde erwarten, dass, wenn ich die Farbe mit einer Farbauswahl, schwarz mit einer Opazität mit 50% Schnüffler machen würde # 7F7F7F, sondern ich # C2C2C2 für den kleineren Textblock zu erhalten, und die # 7F7F7F erwartet die größere Schrift und das Rechteck.

Frage wurde teilweise bei https://github.com/ButchersBoy/MaterialDesignInXamlToolkit/issues/408 gestellt, aber nicht richtig beantwortet.

Jede Hilfe wird geschätzt!

Der Code ist:

<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> 
+0

Ich bin mir nicht sicher, warum es passiert, aber Ich kann die Farbänderungen bei FontSize = 80 auf meinem Computer überprüfen. –

+0

Nach https://support.microsoft.com/nl-be/help/2712383/wpf-application-hangs-when-fonts-over-100pts-in-size, Net 3.5 hat Schwierigkeiten mit fonsizes von 100 und größer (insbesondere, wenn 100 Punkte nach den Transformationen, dpi-Einstellungen usw.). Vielleicht gibt es noch einen "übrig gebliebenen" Fehler in Bezug auf Deckkraft und Schriftgrößen von 100 Punkten und mehr. – Xilconic

Antwort

1

Sie eine Abhilfe auf den gesamten Textblock, indem Sie die Opazität nutzen könnten. Dies würde natürlich auch die Deckkraft des Backbrush ändern, so dass es möglicherweise nicht den gewünschten Effekt hat, wenn Sie eine andere StackPanel-Hintergrundfarbe haben.

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

Aber es gibt auch die Möglichkeit, nur die Control eines Textblock und verbinden Sie die Opazität Eigenschaft in den Vordergrund zu überschreiben.

Oder Sie könnten ein Gitter mit in einem Textblock machen, so können Sie die Deckkraft-Eigenschaft auf dem Textblock festgelegt, ohne den Hintergrund des Rechtecks ​​berührt es in sitzt.

Verwandte Themen