首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF 3.5中不一致的抗锯齿

WPF 3.5中不一致的抗锯齿
EN

Stack Overflow用户
提问于 2010-08-10 07:36:47
回答 4查看 1.4K关注 0票数 9

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

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

然而,在使用相同设置的测试应用程序中,边缘具有良好的抗锯齿效果:

我假设在XAML层次结构中有一些设置在控制这一点,但我已经尝试在设计时和运行时(使用绑定和工具,如Snoop)对各种元素和样式设置SnapsToDevicePixels,但都无济于事。

ElementFlow的XAML如下所示:

代码语言:javascript
复制
<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 Embedded,两款都有不同级别的专用图形),两款应用都在一款应用中显示了锯齿,在另一款中显示了抗锯齿。

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-20 02:41:28

如果我没记错的话,在这个场景中,WPF 3.5中有一个关于别名的bug,我永远也找不到相关的信息,但根据我所记得的,这是一个没有被WPF正确设置的Direct X标志。

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

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

抱歉,我不能提供更多的帮助,我仍在寻找信息,但我的谷歌能力今天似乎很弱。

更新:好的,我找到我想要的了。

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/7382637b-b4bc-4a46-8bed-f36250a65385/

这与效果有关,所以这可能不是你所看到的相同的东西,但值得一试。

票数 1
EN

Stack Overflow用户

发布于 2010-08-20 21:04:12

需要考虑的一件事是ElementFlow控件的位置。如果排列矩形不是在整个像素上,那么可能会抛出所有东西。SnapToDevicePixels将不会对排列rect提供帮助。

使用TextBlocks时通常会发生这种情况,因为它们的高度/宽度通常不是整数。

在.NET 4中,有一个新的FrameworkElement.UseLayoutRounding可以解决这个问题。

票数 1
EN

Stack Overflow用户

发布于 2010-08-21 13:11:26

这是WPF 3D的一个常见问题。FluidKit的ElementFlow使用WPF3D。控件中的项是实际的3D对象(Viewport3D、ContainerUIElement3D)。子像素渲染问题,LayoutRounding和SnapToDevicePixels不适用于3D内容。当性能不正确时,WPF会恢复为带别名的Viewport3D内容。所以很可能你的问题应用程序消耗了太多的资源(CPU,GPU,内存)。我的经验是,在windows XP下,这种情况比在Vista/Windows7下发生得更频繁。对于Windows XP,设置antialiasing registry key会有所帮助。除此之外,除了提高你的应用程序的性能之外,你对此也无能为力。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3444977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档