我正在尝试在新窗口中显示由OpenFileDialog
加载的图片。
第一种方式,完全在代码中完成。不过,我想以另一种方式做到这一点。我尝试将该图像添加到资源中,然后将其用于给定控件。
XAML部分:
<Window.Resources>
<Image x:Key="imageResource">
<Image.Source>
<BitmapImage UriSource="{Binding ImageUri}" />
</Image.Source>
</Image>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Image Name="image" />
<Image Name="image2" Grid.Column="1" Source="{Binding imageResource}" />
</Grid>
C#代码:
public partial class PicWindow : Window
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
private Uri imageUri;
public Uri ImageUri
{
get
{
return imageUri;
}
set
{
imageUri = value;
NotifyPropertyChanged("ImageUri");
}
}
public PicWindow()
{
InitializeComponent();
}
public PicWindow(string filePath)
{
InitializeComponent();
imageUri = new Uri(filePath);
image.Source = new BitmapImage(imageUri);
}
}
左列(在c#代码中完成)显示已加载的图片,但右图不显示(具有绑定用途的图片)。
附:关于在新窗口中打开每个新图片,我意识到ImageUri
更改通知在这里是多余的。请忽略这一点。
答案 0 :(得分:1)
删除Image资源并直接绑定到Window的ImageUri
属性:
<Image Name="image2" Grid.Column="1"
Source="{Binding ImageUri, RelativeSource={RelativeSource AncestorType=Window}}" />
内置类型转换会自动从Uri
类型转换为ImageSource
。