2017-04-06 3 views
0

이 응용 프로그램을 개발하는 동안 저는 3D 모델 렌더링을 위해 캔버스를 사용했습니다. 이 캔버스는 지금까지이 XAML로 표현되었습니다.WPF Canvas - 그라디언트와 이미지가 모두있는 배경?

<Canvas x:Name="modelCanvas" Grid.Row="0"> 
    <Canvas.Background> 
     <RadialGradientBrush> 
      <GradientStop Color="#FFDED9D9" Offset="1"/> 
      <GradientStop Color="White" Offset="0.007"/> 
     </RadialGradientBrush> 
    </Canvas.Background> 
</Canvas> 

이 배경에도 이미지를 추가하고 싶습니다. Canvas.Background의 자식으로 <ImageBrush ImageSource="/Images/bg2.png"/>을 추가하려고 시도했지만 배경을 설정하는 브러시를 하나만 사용할 수 있기 때문에 이것은 분명히 실패했습니다. 브러쉬를 결합하는 방법이 없습니까? 이 책임이 뷰포트에 떨어질 수 있습니까? 이 이미지를 렌더링 환경과 완전히 분리하기를 바랬습니다.

이상적으로이 문제에 대한 해결책은 XAML에서 해결할 수 있지만 C#에서는 프로젝트를 개발 중입니다.

+0

그것은 당신이 달성하려고하는지 불분명하다. 그라디언트 위에 이미지가 부분적으로 투명하게 오버레이되어 있습니까? 아니면 이미지 불투명도에 그라디언트가 있어야할까요? – Clemens

+0

@Clemens 이미지는 부분적으로 투명하며 그라데이션 위에 겹쳐 져서 표시됩니다. 하나의 분명한 옵션은 이미지 편집기에서 그런 이미지를 만드는 것이지만, 나는 그 해결책을 피하고 싶다. – jah

+0

_ "브러쉬를 결합하는 방법이 없습니까?"_ - 저는 내장형 "복합 브러시"유형을 알지 못합니다. 그러나'DrawingBrush'를 사용하여 _drawing_ 오브젝트를 백그라운드로 사용할 수있는 단일 브러시로 결합 할 수 있습니다. 'DrawingGroup'을 사용하여'ImageDrawing'과'GeometryDrawing'을 결합 할 수 있습니다. 후자는'RadialGradientBrush'를 사용합니다. 'DrawingBrush.Drawing'을'DrawingGroup'으로 설정하면, 배경으로 사용할 수있는 브러시가 하나 있습니다. Clemens가 게시 한 답변을 사용할 수도 있습니다. 어느 쪽이든, 이미지를 빌드에 포함시켜야합니다. –

답변

0

당신은, 그리드의 캔버스를 넣어 그리드의 배경에 GradientBrush을 이동하고 그리드의 첫 번째 자식으로 이미지 요소를 추가 할 수 있습니다

<Grid> 
    <Grid.Background> 
     <RadialGradientBrush> 
      <GradientStop Color="#FFDED9D9" Offset="1"/> 
      <GradientStop Color="White" Offset="0.007"/> 
     </RadialGradientBrush> 
    </Grid.Background> 
    <Image Source="transparent.png"/> 
    <Canvas x:Name="modelCanvas" Grid.Row="0"> 
    </Canvas> 
</Grid> 
+0

불행히도, Visual Studio 미리보기를 보면 작동하는 것처럼 보이지만 프로그램을 실행하면 (캔버스의 뷰포트에서 일부 광원을 초기화 함) 이미지가 더 이상 보이지 않습니다. 그래디언트가 표시됩니다. – jah

+0

이미지 파일이 Visual Studio 프로젝트의 일부이고 빌드 작업이 리소스로 설정되어 있는지 확인하십시오. – Clemens

+0

이미지가 프로젝트의 일부이고 자원으로 설정되었는지 확인한 후에 똑같은 동작 (그라디언트가 있지만 이미지가 없음)을 관찰했습니다. – jah