2013-05-11 109 views
1

我有一个WPF窗体具有TextBoxes和DatePickers。 DatePicker文本框的字体真的很模糊,因为我在样式上放置了阴影效果。最初,所有控件都具有明确的阴影效果作为样式的一部分,但我通过从控件中删除阴影效果并将其移至具有相同阴影的矩形来解决此问题。WPF修复模糊DataPicker文本框有阴影

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

<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的文本框云里雾里的字体相同的问题,因为阴影效果还是直接控制。

enter image description here

我没有一个datepicker的风格,但我确实有DatePickerTextBox,这是其中的效果来自于一种风格。

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

我不知道该怎么办,是按照我以前的去除效果的图案,具有相同效果的创建矩形,并把它背后的文本框的DatePicker所以它的同尺寸等我需要XAML的一点帮助才能这样做。

任何人都可以提供任何建议吗?

谢谢!

+1

有你的'DatePickerTextBox'风格尝试'SnapsToDevicePixels' ,例如:'' – 2013-05-11 02:45:37

+0

由于这是文本,我会考虑修改文本的ClearType属性:http://msdn.microsoft.com/en-us /library/ms749295.aspx – Xcalibur37 2013-05-11 14:27:04

+0

这两个建议(SnapsToDevicePixels和RenderOptions.ClearTypeHint)都没有改变任何东西。我有一个解决方案,我只是不知道如何在XAML中进行设置。 – cardinalPilot 2013-05-11 14:42:29

回答

0

因为关于TextFormattingMode的知识确实需要传播,所以我决定发布以下内容 - 即使它奇怪地对DatePickerTextBox没有帮助,但仍然很模糊。它可以防止你从TextBox后面的矩形拉出来的特技。

enter image description hereenter 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>