【问题标题】:(WPF) Binding an Image to an URL via code does not work(WPF) 通过代码将图像绑定到 URL 不起作用
【发布时间】:2021-11-26 00:36:08
【问题描述】:

四处寻找,一无所获,我决定问问。

我正在处理一个 .NET 5.0 WPF 项目,我必须将(在线图像的)URL 绑定到表单上图像的源。

我尝试了以下方法:

CoverImage.Source = new BitmapImage("https://somesite..com/img.png");

以及通过 XAML 绑定它:

///XAML:
<Image Name="CoverImage"
       Source="{Binding PreviewSource}"/>

///C#
public string PreviewSource { get; set; } = "https://somesite..com/img.png";

我尝试了其他解决方案,例如从 HrrpRequest 获取图像,然后通过 MemoryStream 创建它。

使用本地图像(在电脑上)没有问题。

编辑:mm8 的解决方案似乎无缘无故开始工作(自第一次测试以来我根本没有接触过代码)

【问题讨论】:

  • 您遇到错误了吗?如果有,请说明。如果没有,发生了什么?
  • @CMGeek 不幸的是,没有,没有错误。图片只是不加载。
  • @Fruchtzwerg 刚试过,没有成功。

标签: c# wpf binding bitmap


【解决方案1】:
new BitmapImage(new Uri("https://www.google.se/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png"))` 

<Image Name="CoverImage" Source="https://www.google.se/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png"/>

...在 .NET 5 上按预期工作。

确保您的 URL 有效且可从您的客户端计算机访问。

【讨论】:

  • 感谢您的回答。 XAML 运行良好,但第一个选项仍然不起作用。我还需要设置什么才能使其正常工作吗?
  • 没有。您在哪里以及如何设置创建BitmapImage?或者你为什么不能使用 XAML 解决方案?
  • 今天刚开始使用您的 C# 解决方案。我没有改变任何东西,所以我不确定为什么会这样。
【解决方案2】:

您确定数据上下文正确吗?它在下面的应用程序中对我有用。

Xaml 代码

<Grid>
    <Image Name="CoverImage" Source="{Binding ImageSource}"/>
</Grid>

视图模型

class MainWindowViewModel : ViewModelBase
{
    private BitmapImage _imageSource;

    public BitmapImage ImageSource
    {
        get => _imageSource;
        set => SetProperty(ref _imageSource, value);
    }

    public MainWindowViewModel()
    {
        ImageSource = new BitmapImage(new Uri("https://www.google.se/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png"));
    }
}

ViewModelBase

public abstract class ViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual bool SetProperty<T>(ref T member, T value, [CallerMemberName] string propertyName = null)
    {
        if (EqualityComparer<T>.Default.Equals(member, value))
        {
            return false;
        }

        member = value;
        OnPropertyChanged(propertyName);
        return true;
    }

    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
        => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

MainWindow.xaml.cs

public MainWindow()
    {
        DataContext = new MainWindowViewModel();
        InitializeComponent();
      
    }

【讨论】:

    猜你喜欢
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 2018-02-20
    • 2017-11-18
    • 1970-01-01
    相关资源
    最近更新 更多