2017-04-06 56 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