为什么我的OpacityMask导致渲染错误?

时间:2012-04-10 10:16:42

标签: wpf wpf-controls

我在WPF中组合OpacityMask和Adorners时遇到了一些麻烦。

基本上有一个图像应用了不透明蒙版,在它上面是一个装饰,这是一个可移动的指南。

移动Adorner时,图像中会出现瑕疵。沿着装饰器的边界框,出现了1px宽的线条。在这些线条上,图像变得透明(尽管不透明蒙版不会使区域透明)。 此行为取决于两个(afaik)因素:

  • 当我将不透明蒙版设置为null时,没有可见的工件。
  • 当我更改缩放变换时,工件的不透明度正在发生变化。

知道什么可能导致这种行为或我如何避免它?

这是一些代表我的布局的XAML代码。这不是实际的布局代码。我试图将布局内容减少到关键组件,我认为这些组件与问题有关。

<ScrollViewer>
    <ContentControl> <!-- control for zooming the content with a render transform -->
        <Image Source="..." /> <!-- Background-Image -->
        <Image Source="..."> <!-- Foreground-Image with Mask -->
            <Image.OpacityMask>
                <VisualBrush />
            </Image.OpacityMask>
        </Image>
    </ContentControl>
    <AdornerLayer>
        <myControls:GuideLineAdorner />
    </AdornerLayer>
</ScrollViewer>

神器线的屏幕截图: Screenshot of the artifacts

1 个答案:

答案 0 :(得分:1)

我最近碰到了这个问题。经过一番谷歌搜索后,我遇到this msdn forum post给了我需要的解决方法。

就我而言,我有一个带有OpacityMask的Grid。 Grid的子节点正在显示工件。为了防止显示工件,我能够在我的网格上将RenderOptions.EdgeMode附加属性设置为“别名”。