删除了我的旧问题,以便我可以制作一个更具体的问题。我使用http://www.c-sharpcorner.com/uploadfile/mahesh/image-viewer-in-wpf/中的代码作为基础。允许用户浏览要打开和显示的图像文件。我想显示一个图像,然后让用户在上面做标记。我决定为此使用画布。现在,我无法弄清楚如何将用户选择的图像作为背景。我收到的错误是" System.Windows.Shapes.Path不包含'背景'没有扩展方法'背景'接受类型' System.Windows.Shapes.Path'的第一个参数。可以找到......"从描述' canvas1.Background = brush;"的行。我已经找到了设置画布背景的方法,有些只涉及使用xaml代码,但后来我遇到了其他错误。
XAML:
<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">
<Grid >
<Label Content="Image" Height="32" HorizontalAlignment="Left" Margin="11,10,0,0"
Name="selectedFileName" VerticalAlignment="Top" Width="393"
Background="LightGray" BorderBrush="Gray" BorderThickness="1"/>
<Button Content="Browse File" Height="34" HorizontalAlignment="Left" Margin="410,8,0,0"
Name="BrowseButton" VerticalAlignment="Top" Width="119"
Foreground="Maroon" FontSize="16" FontFamily="Georgia" Click="BrowseButton_Click" />
<Canvas>
<Path Canvas.Left="61" Canvas.Top="28" Width="133" Height="98" Fill="Blue"
Stretch="Fill" Data="M61,125 L193,28" Name="canvas1"/>
</Canvas>
</Grid>
</Window>
代码背后:
namespace CanvasStuff
{
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
}
private void BrowseButton_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.InitialDirectory = "c:\\";
dlg.Filter = "Image files (*.jpg)|*.jpg|All Files (*.*)|*.*";
dlg.RestoreDirectory = true;
if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string selectedFileName = dlg.FileName;
ImageBrush brush = new ImageBrush();
brush.ImageSource = new BitmapImage(new Uri(selectedFileName, UriKind.Relative));
canvas1.Background = brush; #error here
BitmapImage bitmap = new BitmapImage();
}
}
}
}
答案 0 :(得分:1)
“canvas1”元素是一个路径,因此它有一个fill属性而不是background属性,所以你可以用canvas1.Fill替换canvas1.Background。但这不会给你一个背景,因为那条路径只有一个小的尺寸。你真的希望你的窗口有一个背景,你可以使用一个包围的边界。
<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;
答案 1 :(得分:0)
感谢bonyjoe和King King。我的主要问题是我忘记了在前一个例子中使用的路径(不要在那里)。所以我的canvas .xaml代码现在看起来像这样:
<Canvas Margin="0,48,0,0" x:Name="canvas1">
</Canvas>
这解决了我想要做的事情。