C# 使用用户选择的图像作为画布背景

C# 使用用户选择的图像作为画布背景,c#,wpf,image,wpf-controls,C#,Wpf,Image,Wpf Controls,删除了我以前的问题,这样我可以做一个更具体的问题。我使用来自的代码作为基础。允许用户浏览要打开和显示的图像文件。我想显示一个图像,然后让用户在上面做标记。我决定用画布来做这个。现在,我不知道如何将用户选择的图像作为背景。我收到一个错误,在“canvas1.Background=brush”行中显示“System.Windows.Shapes.Path不包含“Background”的定义,并且没有扩展方法“Background”接受类型为“System.Windows.Shapes.Path”的第

删除了我以前的问题,这样我可以做一个更具体的问题。我使用来自的代码作为基础。允许用户浏览要打开和显示的图像文件。我想显示一个图像,然后让用户在上面做标记。我决定用画布来做这个。现在,我不知道如何将用户选择的图像作为背景。我收到一个错误,在“canvas1.Background=brush”行中显示“System.Windows.Shapes.Path不包含“Background”的定义,并且没有扩展方法“Background”接受类型为“System.Windows.Shapes.Path”的第一个参数;“。我找到了设置画布背景的方法,有些方法只涉及使用xaml代码,但随后我发现了其他错误

XAML:

“canvas1”元素是一个路径,因此它有一个fill属性而不是background属性,因此您可以将canvas1.background替换为canvas1.fill。但这不会为您提供背景,因为该路径的大小很小。您确实希望您的窗口有一个背景,可以使用包围边框来实现

<Window x:Class="CanvasStuff.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Main Window" Height="409" Width="574">
<Border x:Name="bgBorder" BorderThickness="0">
    <!-- insert your current content here -->
</Border>
</Window>


多亏了bonyjoe和King King,我才明白这一点。我的主要问题是我忘记了在上一个示例中使用的路径(不想在其中)。因此,我的canvas.xaml代码现在如下所示:

    <Canvas Margin="0,48,0,0" x:Name="canvas1">
    </Canvas>


这修复了我试图执行的操作。

使用
UriKind.Absolute
取而代之的是,所选文件当然应该位于某个绝对路径中。我更改了它,但得到了相同的错误。我认为我在.xaml中没有正确使用Name=canvas1。当我处理这些问题时,.background错误会消失,但我得到的canvas1在curr中没有使用ent上下文错误。您正在为内部
路径设置
名称
,而不是
画布
,为什么命名问题对您来说如此困难?无论如何,我之前的评论仍然是您的另一个问题,不信由您。请保留您的代码,并在正确命名画布后运行它。对,我刚刚注意到在loo之后下面bonyjoe的例子中的king。从上一个例子中得到了这条路径,但忘了去掉它。谢谢!谢谢!我不知道为什么我在那里有一条路径。我想我是通过查看画布示例得到它的,只是忘了它。我去掉了它,并稍微修改了我的.xaml,现在它可以工作了。@pfferno真的吗?仍然使用
UriKind。相对的
?我像你说的那样更改了它,这使我避免了将来的问题。谢谢。没问题,如果你觉得它有用,请标记为答案。此外,你可以完全省略UriKind,Uri(字符串)构造函数假定为UriKind.Absolute。
<Window x:Class="CanvasStuff.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Main Window" Height="409" Width="574">
<Border x:Name="bgBorder" BorderThickness="0">
    <!-- insert your current content here -->
</Border>
</Window>
canvas1.Background = brush;
bgBorder.Background = brush;
    <Canvas Margin="0,48,0,0" x:Name="canvas1">
    </Canvas>