c# - 如何强制平滑呈现 WPF 控件?

标签 c# wpf image rendering

我正在创建一个简单的 WPF 应用程序,它应该在一个可滚动区域内组合几个图像。这些图片应该绝对没有边框,只要正确定位它们应该没有问题。

当我启动应用程序时,一切都按预期呈现。但是当我开始滚动时,图像之间会出现一些(白色)边界。 (见截图)

Example where unexpected border occur

我认为当我在 ScrollViewer 中开始缩放/缩放时会出现同样的问题。

所以我的问题是,如何在 WPF 应用程序中,尤其是在 ScrollViewer 中避免这种边界?

下面的代码应该足以重现问题:

<Window x:Class="Test.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <ScrollViewer HorizontalAlignment="Stretch" Name="scrollViewer1" VerticalAlignment="Stretch" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
        <Grid>
            <Grid Background="Black" Width="500" Height="500" VerticalAlignment="Top" HorizontalAlignment="Left"/>
            <Grid Background="Black" Width="500" Height="500" Margin="500,0,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
            <Grid Background="Black" Width="500" Height="500" Margin="500,500,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
            <Grid Background="Black" Width="500" Height="500" Margin="0,500,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
        </Grid>
    </ScrollViewer>
</Grid>

最佳答案

答案是将具有此类边框的控件的 RenderOptions.EdgeMode 显式设置为 Aliased

对于我上面的例子,代码看起来像这样:

<Window x:Class="Test.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <ScrollViewer HorizontalAlignment="Stretch" Name="scrollViewer1" VerticalAlignment="Stretch" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
        <Grid>
            <Grid Background="Black" Width="500" Height="500" VerticalAlignment="Top" HorizontalAlignment="Left" RenderOptions.EdgeMode="Aliased"/>
            <Grid Background="Black" Width="500" Height="500" Margin="500,0,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" RenderOptions.EdgeMode="Aliased"/>
            <Grid Background="Black" Width="500" Height="500" Margin="500,500,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" RenderOptions.EdgeMode="Aliased"/>
            <Grid Background="Black" Width="500" Height="500" Margin="0,500,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" RenderOptions.EdgeMode="Aliased"/>
        </Grid>
    </ScrollViewer>
</Grid>

关于c# - 如何强制平滑呈现 WPF 控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18298820/

相关文章:

c# - 在 C# 代码中分隔大数字的数字

wpf - 使用自定义列启用 DataGrid 复制

CSS/JQUERY 图像裁剪,类似 <div> overflow :hidden with fixed width/height without using div?

python - 如何使用 Python 解码内存中的 JPEG XR 文件

javascript - 在 asp.net 中使用 updatePanel 后,DropDownList 丢失其属性

c# - .Net IBM MQ 错误 "MQRCCF_CFIN_PARM_ID_ERROR"3014

c# - 在 wpf 和 C# 中制作自定义形状的按钮

wpf - 什么是 "Page Function"?

c# - 显示列表框的多个成员路径

android - 替换图像时动态刷新 gridview。 notifyDataSetChanged() 不工作