Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net WPF 3.5中的抗锯齿不一致_.net_Wpf_Antialiasing - Fatal编程技术网

.net WPF 3.5中的抗锯齿不一致

.net WPF 3.5中的抗锯齿不一致,.net,wpf,antialiasing,.net,Wpf,Antialiasing,我在使用ElementFlow控件的WPF应用程序中遇到了奇怪的别名行为。我们正在使用应用程序中的控件显示内容,当ElementFlow的元素倾斜时,边缘别名如下图所示: 为了避免混淆,我们决定去掉倾斜角度,所以我创建了一个快速测试应用程序,将倾斜角度、项目间距和弹出距离绑定到滑块,这样我就可以找到最合适的 但是,在使用相同设置的测试应用程序中,边缘很好地消除了锯齿: 我假设在XAML层次结构的某个地方有一些设置可以控制这一点,但我尝试在各种元素和样式上设置SnapsToDevicePixe

我在使用ElementFlow控件的WPF应用程序中遇到了奇怪的别名行为。我们正在使用应用程序中的控件显示内容,当ElementFlow的元素倾斜时,边缘别名如下图所示:

为了避免混淆,我们决定去掉倾斜角度,所以我创建了一个快速测试应用程序,将倾斜角度、项目间距和弹出距离绑定到滑块,这样我就可以找到最合适的

但是,在使用相同设置的测试应用程序中,边缘很好地消除了锯齿:

我假设在XAML层次结构的某个地方有一些设置可以控制这一点,但我尝试在各种元素和样式上设置
SnapsToDevicePixels
,无论是在设计时还是在运行时(使用绑定和Snoop之类的工具),都没有用

ElementFlow的XAML如下所示:

<ListView.ItemsPanel>
    <ItemsPanelTemplate>
        <Fluid:ElementFlow
            x:Name="ContentElementFlow"
            SelectedIndex="{Binding SelectedIndex}"
            Focusable="True"
            TiltAngle="15.95"
            ItemGap="0.722"
            FrontItemGap="0.052"
            PopoutDistance="1.631"
            HasReflection="False"
            Background="Transparent"
            CurrentView="{StaticResource CoverFlowView}"
            ElementWidth="175"
            ElementHeight="250"
            >
            <Fluid:ElementFlow.Camera>
                <PerspectiveCamera
                    FieldOfView="60"
                    Position="0,0,6"
                    LookDirection="0,0,-6"
                    UpDirection="0,1,0"
                    />
            </Fluid:ElementFlow.Camera>
        </Fluid:ElementFlow>
    </ItemsPanelTemplate>
</ListView.ItemsPanel>

我也在两台不同的机器上试用了这两个应用程序(一台运行XP Pro,一台嵌入XP,两个都有不同级别的专用图形),并且都在一个应用程序中演示了锯齿,在另一个应用程序中演示了抗锯齿


有人知道可以用来控制这一点的任何设置或XAML属性吗?

MSFT的Brendan Clark说:

当您尝试 在子像素位置绘制内容。 如果你试图在地图上画一条线 半像素边界,WPF通常 反锯齿线以使其混合 包含它的两个像素(其中 使它变得不那么锋利, 较轻,或“模糊”)。如果你强迫 锯齿渲染,子像素上的线 有时会划定界限 完全在一个像素内;其他时间 四舍五入的结果是这样的 它们消失了


您是否尝试将不同的值设置为ElementHeight?

如果我没有记错,WPF 3.5中有一个关于此场景中别名的错误,我一生都找不到相关信息,但根据我的记忆,WPF没有正确设置直接的X标志

我记得我发现,如果将有问题的元素包装在某些类型的父元素中,似乎可以解决问题。例如,我认为将有问题的元素包装在空边框中可以解决问题?再说一次,我一生都无法再次找到这些信息,但如果我找到了,我会更新我的答案

我假设您在应用程序之间看到的差异与此相关。在显示别名的应用程序中,ItemTemplate中的项目是否包装在某种父元素中(作为测试应用程序,它们不是)?或者反之亦然

对不起,我帮不上什么忙,还在寻找信息,但我的谷歌能力今天似乎很弱

更新:好的,我找到了我的想法


<>这与效果有关,也许这不是你看到的,但值得一试。

一个要考虑的因素是元素流控制的位置。如果arrange rect不在整个像素上,则可能会丢失所有内容。SnapToDevicePixels对arrange rect没有帮助

这通常发生在使用文本块时,因为它们的高度/宽度通常不是整数


在.NET 4中,有一个新的解决方案解决了这个问题。

这是WPF 3D的一个常见问题。FluidKit的ElementFlow使用WPF 3D。控件中的项目是acutal 3D对象(Viewport3D、ContainerUIElement3D)。子像素渲染问题、布局边界和SnapToDevicePixels不适用于3D内容。当性能不正常时,WPF将恢复为别名Viewport3D内容。所以最有可能的是,你的有问题的应用程序消耗了太多的资源(CPU、GPU、内存)。我的经验是,在windows XP下比在Vista/windows 7下更频繁地发生这种情况。对于Windows XP,设置默认值有点帮助。除此之外,为了提高应用程序的性能,您也无能为力。

感谢您的建议,我以前尝试过各种类似的方法,但都没有效果。通过修改ElementHeight,我可以将测试应用程序设置为alias,但无法将实际应用程序设置为anti-alias感谢本文。我尝试在测试和real应用程序中更改一些布局容器,但无法更改别名问题,但这可能值得更深入地研究。鉴于视觉树的深度/复杂性是应用程序之间的唯一区别,我将假设这是正确的答案,直到我有时间以这种或那种方式进行进一步测试。感谢FluidKit ElementFlow是一个三维视口。以上所有内容均不适用于WPF 3D。您对此有参考资料吗?该应用程序在运行Atom处理器和Radeon mobility graphics的嵌入式设备上,以及在运行i7处理器和Radeon 4550图形卡的台式机上演示了此问题,我们在这里做了很多WPF 3D,我们经常看到这种行为。抗锯齿神奇地停止了工作。我们假设它一定与资源使用有关,因为我们通常可以通过在应用程序启动期间减少资源来解决它。嗯,很有趣,不幸的是,我们目前没有资源来进一步调查这一问题。我对你的答案投了赞成票,如果有机会,我一定会重新考虑这个问题。谢谢你的信息。