WPF:将位图源绑定到XAML资源失败

时间:2017-05-24 17:47:32

标签: c# wpf xaml

我正在尝试在新窗口中显示由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更改通知在这里是多余的。请忽略这一点。

1 个答案:

答案 0 :(得分:1)

删除Image资源并直接绑定到Window的ImageUri属性:

<Image Name="image2" Grid.Column="1"
       Source="{Binding ImageUri, RelativeSource={RelativeSource AncestorType=Window}}" />

内置类型转换会自动从Uri类型转换为ImageSource