我正在使用的窗口的目的是显示图像,该图像是从前一个窗口中选择的,因此后面的代码将_scan
作为参数,其中包含所需的图像。
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="66*"/>
<RowDefinition Height="191*"/>
</Grid.RowDefinitions>
<Border Height="600" Width="600" Margin="197,86,197,85" Grid.RowSpan="2">
<Image Source="{Binding img}" HorizontalAlignment="Center" VerticalAlignment="Center" Panel.ZIndex="1"/>
</Border>
</Grid>
后面的代码
private Scan scan { get; set; }
BitmapImage img;
public ImageEdit(Scan _scan)
{
InitializeComponent();
scan = _scan;
window.DataContext = this;
img = scan.Image;
}
类文件Scan.cs
public Scan(int scanid,string image)
{
ScanId = scanid;
var path = System.IO.Path.Combine(Environment.CurrentDirectory, "Image", image);
Image = new Uri(path);
}
public dynamic Image
{
get { return new BitmapImage(_image); }
set
{
_image = value;
RaisePropertyChanged("Image");
}
}
System.Windows.Data错误:40:BindingExpression路径错误:在“对象”“ ImageEdit”(名称=“窗口”)上找不到“ img”属性。 BindingExpression:Path = img; DataItem ='ImageEdit'(Name ='window');目标元素是'Image'(Name ='');目标属性为“来源”(类型为“图片来源”)
如下所示,我只能在窗口上成功显示图像:
<Image HorizontalAlignment="Center" VerticalAlignment="Center" Panel.ZIndex="1">
<Image.Source>
<BitmapImage UriSource="C:\\Users\\user\\Desktop\\MyProject\\project1\\bin\\Debug\\Image\\1.png"/>
</Image.Source>
</Image>
但是,正如我在开头提到的,所需的图像取决于从前一个窗口中选择了哪个图像,这必须以编程方式完成,而不是直接将Uri
分配给BitmapImage.UriSource
。另外,如果我尝试将{Binding img}
分配给BitmapImage.UriSource
并将Uri
对象分配给img
,程序执行会崩溃并在Output中显示以下消息:
System.Windows.Media.Animation警告:6:无法执行操作,因为指定的Storyboard从未应用于此对象进行交互式控制。动作=“删除”; Storyboard ='System.Windows.Media.Animation.Storyboard'; Storyboard.HashCode ='23621495'; Storyboard.Type ='System.Windows.Media.Animation.Storyboard'; TargetElement ='System.Windows.Media.Animation.Storyboard'; TargetElement.HashCode ='23621495'; TargetElement.Type ='System.Windows.Media.Animation.Storyboard'
我不知道为什么会出现这样的消息。它只是BitmapImage
,甚至不包含任何动画。
无论如何,如何才能成功地从代码后面加载图像?