当我使用Uri课时为什么会显示黑屏?

时间:2015-11-14 19:07:17

标签: c# visual-studio xaml windows-store-apps

我在c#中创建一个简单的Windows应用商店应用。当我绑定我的图像控件以显示代码隐藏的图像时,我的屏幕变黑。谁知道我怎么解决这个问题?

ImageService类

public class ImageService 
{     

  public Image Image { get; set; }      

    public ImageService()
    {
        var uri = new System.Uri("ms-appx:///assets/Logo.scale-100.png");
        var bmp = new BitmapImage(uri);
        Image.Source = bmp;
    }
}

XAML文件

  <Image x:Name="image" HorizontalAlignment="Left" Height="223"     Margin="394,279,0,0" VerticalAlignment="Top" Width="305" Source="{Binding Image, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Stretch="UniformToFill"/>

3 个答案:

答案 0 :(得分:1)

使用此:

public class ImageService
{
    public Uri Image { get; set; }
    public ImageService()
    {
        Image = new Uri("ms-appx:///assets/Logo.scale-100.png");
    }
}

图片的Source属性属于ImageSource,可以轻松替换为Uri(MSDN)

答案 1 :(得分:0)

XAML中的图像具有内置转换器,因此您只需绑定到Uri,就不必在服务中创建图像。

您的服务并未实施INotifyPropertyChanged,因此如果您在构造函数外部的服务中设置图片,您的视图将无法更新。

我没有在您的代码中看到您实例化图片的位置。图像将为null,因此当您加载视图时,图像将为null,从而导致视图上出现空白图像。

答案 2 :(得分:0)

你是说这个意思吗?因为它仍然使得它变黑。

public class ImageService : INotifyPropertyChanged
{
    private Uri _uri;

    public Uri Uri
    {
        get { return _uri; }
        set
        {
            _uri = value;
            OnPropertyChanged();
        }
    }

    public ImageService()
    {
        Uri = new Uri("ms-appx///assets/Logo.scale-100.png");                                                
    }

    public event PropertyChangedEventHandler PropertyChanged;

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