WPF修复具有阴影的模糊DatePicker文本框

时间:2013-05-11 01:11:38

标签: wpf wpf-controls

我有一个包含TextBoxes和DatePickers的WPF表单。 DatePicker文本框字体非常模糊,因为我在样式上添加了阴影效果。最初所有控件都有一个明确的阴影效果作为样式的一部分,但我通过从控件中删除阴影效果并将其移动到具有相同投影的矩形来修复此问题。

然后我将Rectangle直接放在文本框后面 - 我仍然有视觉效果,覆盖控件中的字体看起来很棒。

<DropShadowEffect x:Key="dropShadow" Color="Gray" Opacity=".50" ShadowDepth="8" />

<Style x:Key="BackingRectangleStyle" TargetType="Rectangle">
  <Setter Property="Effect" Value="{StaticResource dropShadow}" />
</Style>

<Rectangle Grid.Row="1" Grid.Column="3" Style="{StaticResource BackingRectangleStyle}"/>
<TextBox Grid.Row="1" Grid.Column="3" ... />

但是,由于投影效果仍然直接在控件上,因此我对使用DatePicker TextBox的模糊字体也有同样的问题。

enter image description here

我没有DatePicker样式,但我确实有DatePickerTextBox的样式,这是效果的来源。

<Style TargetType="{x:Type DatePickerTextBox}">
  <Setter Property="Effect" Value="{StaticResource dropShadow}" />
</Style>

我不知道该怎么做是按照我之前删除效果的模式,创建一个具有相同效果的Rectangle并将其放在DatePicker TextBox后面,这样它的大小相同,等等。我需要一些帮助在XAML上这样做。

有人可以给我任何建议吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

因为关于TextFormattingMode的知识确实需要传播,所以我决定发布以下内容 - 尽管它奇怪地对DatePickerTextBox没有帮助,这仍然是模糊的。它可以防止您使用TextBox后面的矩形拉动特技。

enter image description here enter image description here

除非您有大型或已转换的文本,否则请始终在最外层的WPF容器中使用TextOptions.TextFormattingMode="Display"。 这是在WPF 4.0中引入的,我想默认的“理想”反映了早期版本,但这是一个令人难以置信的错误......

<Window x:Class="WpfApplication1.MainWindow" x:Name="MyWindow" 
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Height="300" Width="400"
            TextOptions.TextFormattingMode="Display"> <!-- Please notice the effect of this on font fuzzyness -->
    <Grid>
        <Grid.Resources>
            <DropShadowEffect x:Key="DropShadow" Color="Gray" Opacity=".5" ShadowDepth="8"/>
        </Grid.Resources>
        <TextBox Text="Really Sharp" HorizontalAlignment="Center" Padding="3" VerticalAlignment="Center" Effect="{StaticResource DropShadow}"/>
    </Grid>
</Window>