2017-04-06 53 views
0

对于我的这个应用程序的开发时间,我一直在使用画布3D模型的渲染。这已帆布,到现在为止,已经代表这个XAML:WPF画布 - 具有渐变和图像的背景?

<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> 

我想图像添加到这个背景,以及。我尝试添加<ImageBrush ImageSource="/Images/bg2.png"/>作为Canvas.Background一个孩子,但是这显然没有,因为只有一个刷子可以用来设置背景。有没有什么合并刷子的方式?这个责任可能落在视口上吗?我希望保持这个图像完全独立于渲染环境。

虽然理想的解决方案,这个问题可以在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