Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF画布-具有渐变和图像的背景?_C#_Wpf_Xaml_Canvas_Background - Fatal编程技术网

C# WPF画布-具有渐变和图像的背景?

C# WPF画布-具有渐变和图像的背景?,c#,wpf,xaml,canvas,background,C#,Wpf,Xaml,Canvas,Background,在开发这个应用程序的过程中,我一直在使用画布渲染三维模型。到目前为止,此画布已使用以下XAML表示: <Canvas x:Name="modelCanvas" Grid.Row="0"> <Canvas.Background> <RadialGradientBrush> <GradientStop Color="#FFDED9D9" Offset="1"/> <Gradi

在开发这个应用程序的过程中,我一直在使用画布渲染三维模型。到目前为止,此画布已使用以下XAML表示:

<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
的子级添加,但显然失败了,因为只能使用一个笔刷来设置背景。有没有一些组合笔刷的方法?这个责任会落到视口上吗?我希望将此图像与渲染环境完全分开


虽然理想情况下,这个问题的解决方案可以用XAML来解决,但我正在用C#开发这个项目,如果需要的话。

您可以将画布放在网格中,将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>

您可以将画布放置在网格中,将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>



不清楚您想要实现什么目标。图像只是渐变上的部分透明覆盖,还是您可能希望在图像不透明度中有一个渐变?@Clemens图像是部分透明的,意味着要叠加在渐变上。一个明显的选择是只在图像编辑器中生成这样的图像,但我希望避免这种解决方案。“有没有一些组合笔刷的方法?”——我不知道内置的“复合笔刷”类型。但是,您可以使用
DrawingBrush
将图形对象组合到一个可以用作背景的笔刷中。您可以使用
DrawingGroup
组合
ImageDrawing
GeometryDrawing
,后者使用
RadialGradientBrush
。将
DrawingBrush.Drawing
设置为
DrawingGroup
,瞧,你有一个笔刷可以用作背景。你也可以使用克莱门斯发布的答案。无论哪种方式,您都需要确保在构建中包含您的图像。@PeterDuniho这非常接近于工作。在VisualStudio上的XAML预览中,我可以让一切看起来像我想要的那样,但是当我运行项目时,我立即体验到了。我已经隔离了我的
对象作为错误的原因,但是按照链接答案的建议更改路径语法并不能消除错误。@PeterDuniho我相信你已经成功地回答了手头的问题,我应该为这个错误提交一个新问题。不清楚你试图实现什么。图像只是渐变上的部分透明覆盖,还是您可能希望在图像不透明度中有一个渐变?@Clemens图像是部分透明的,意味着要叠加在渐变上。一个明显的选择是只在图像编辑器中生成这样的图像,但我希望避免这种解决方案。“有没有一些组合笔刷的方法?”——我不知道内置的“复合笔刷”类型。但是,您可以使用
DrawingBrush
将图形对象组合到一个可以用作背景的笔刷中。您可以使用
DrawingGroup
组合
ImageDrawing
GeometryDrawing
,后者使用
RadialGradientBrush
。将
DrawingBrush.Drawing
设置为
DrawingGroup
,瞧,你有一个笔刷可以用作背景。你也可以使用克莱门斯发布的答案。无论哪种方式,您都需要确保在构建中包含您的图像。@PeterDuniho这非常接近于工作。在VisualStudio上的XAML预览中,我可以让一切看起来像我想要的那样,但是当我运行项目时,我立即体验到了。我已经隔离了我的
对象作为错误的原因,但是按照链接答案的建议更改路径语法并不能消除错误。@PeterDuniho我相信你已经成功地回答了手头的问题,我应该为这个错误提交一个新问题。不幸的是,在查看Visual Studio预览时,它似乎可以工作,但只要我运行程序(初始化画布视口中的某些灯光),图像就不再可见。但是,渐变是可见的。请确保图像文件是Visual Studio项目的一部分,并且其生成操作设置为“资源”。在确保图像是项目的一部分并设置为资源后,我观察到了完全相同的行为(渐变,但没有图像)。您没有意外地在画布上设置任何背景吗?它应该是空的或透明的。是的,画布行只是
放在
之后。不幸的是,在查看Visual Studio预览时,这会使它看起来正常工作,一旦我运行程序(初始化画布视口中的一些灯光),图像就不再可见。但是,渐变是可见的。请确保图像文件是Visual Studio项目的一部分,并且其生成操作设置为“资源”。在确保图像是项目的一部分并设置为资源后,我观察到了完全相同的行为(渐变,但没有图像)。您没有意外地在画布上设置任何背景吗?它应该是空的或透明的。是的,画布行仅放置在
之后。