WPF 用户控件附加到边框时显得模糊

Oh *_*Dog 2 c# wpf xaml blur

我遇到了一个非常奇怪的问题。这是我的观点:

    <Grid>
        <Border x:Name="C01" VerticalAlignment="Center" Panel.ZIndex="2" HorizontalAlignment="Center" />
    </Grid>
Run Code Online (Sandbox Code Playgroud)

这是我想在视图中显示的用户控件:

    <UserControl x:Class="Nwp.UserComponents.ULogin"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             Width="350" Height="220">
        <Grid>
            <Border Margin="10" BorderBrush="DimGray" BorderThickness="1" Background="White">
                <Border.Effect>
                    <DropShadowEffect ShadowDepth="0" BlurRadius="10"/>
                </Border.Effect>
                <Grid>
                    <!-- ... here's content -->
                </Grid>
            </Border>
        </Grid>
    </UserControl>
Run Code Online (Sandbox Code Playgroud)

为了显示用户控件,我将其添加为边框“C01”的子控件,如下所示:

C01.Child = new ULogin();
Run Code Online (Sandbox Code Playgroud)

到目前为止一切正常,看起来像这样:

看起来不错

请注意,用户控件的宽度和高度是 2 个偶数:350 和 220。如果将其中一个更改为奇数,则用户控件显示会有点模糊:

宽度351

当我再次使用偶数时:330x200,没有模糊:

330x200

使用奇数 330x201,再次模糊:

330x201

有谁知道如何解决这个问题?

She*_*dan 5

您只需将UIElement.SnapsToDevicePixels属性设置为BorderTrue

    <Border Margin="10" BorderBrush="DimGray" BorderThickness="1" Background="White" 
        SnapsToDevicePixels="True">
        <Border.Effect>
            <DropShadowEffect ShadowDepth="0" BlurRadius="10"/>
        </Border.Effect>
        <Grid>
            ... here's content
        </Grid>
    </Border>
Run Code Online (Sandbox Code Playgroud)

从 MSDN 上的链接页面:

获取或设置一个值,该值确定此元素的渲染是否应在渲染期间使用特定于设备的像素设置。

...

对于以每英寸 96 点 (dpi) 以上运行的设备,像素捕捉渲染可以最大程度地减少单位实线附近的抗锯齿视觉伪影。

  • 尝试 `TextOptions.TextFormattingMode="Display"` 我相信这至少需要 .net 4.0。 (2认同)