2012-04-10 2 views
1

У меня возникли проблемы с комбинацией OpacityMask и Adorners в WPF.Почему моя OpacityMask вызывает ошибки визуализации?

В основном изображение с маской непрозрачности, нанесенной на него, а над ним - обожатель, который является подвижным ориентиром.

Когда Adorner перемещен, на изображении есть артефакты. Вдоль ограничивающей рамки у adorner появляются 1px широкие линии. В этих строках изображение становится прозрачным (хотя область не прозрачна по маске непрозрачности). Такое поведение зависит от двух (AFAIK) факторов:

  • Когда я установил маску непрозрачности обнулить, нет никаких видимых артефактов.
  • Когда я изменяю масштабное преобразование, непрозрачность артефактов меняется.

Любая идея, что может вызвать такое поведение или как я мог его избежать?

Вот несколько 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

Недавно я столкнулся именно этот вопрос. После небольшого поиска в Google я столкнулся с this msdn forum post, который дал мне обходной путь, в котором я нуждался.

В моем случае у меня была сетка с OpacityMask. Дети Грида показывали артефакты. Чтобы предотвратить отображение артефактов, я смог установить прикрепленное свойство RenderOptions.EdgeMode к «Aliased» на моей сетке.

+0

Спасибо, что выглядит действительно хорошо. – NikoR

Смежные вопросы