UWP图片未更新/重新加载

时间:2019-02-14 18:51:29

标签: c# image uwp uwp-xaml viewbox

我知道在SO上有很多与此类似的问题,但到目前为止,没有一个问题可以解决该问题或显示出有效的解决方案。

在UWP应用中,我有一个Image(在ViewBox内),其来源通过用户选择新图像而更改。我已经确认在代码中的任何地方都没有抛出异常,并且以下切换案例中的所有内容都可以正常运行。我尝试在图像上使用InvalidateArrange()InvalidateMeasure()UpdateLayout(),在UpdateLayout()上使用ViewBox,但似乎没有任何效果。代码运行时会删除初始图像,但不会显示新图像,它只会显示空白。

有人可以查看下面的代码,看看是否能找到问题?我敢肯定,这是我所忽略的简单事物,我似乎根本找不到它。

C#代码

private async void ChangeIcon(int selection)
{
    try
    {
        switch (selection)
        {
            case 0:
                imageEntry.Source = new BitmapImage(new Uri("ms-appx:///FtpSharp/Assets/ftpRed.png"));
                break;
            case 1:
                imageEntry.Source = new BitmapImage(new Uri("ms-appx:///FtpSharp/Assets/ftpOrange.png"));
                break;
            case 2:
                imageEntry.Source = new BitmapImage(new Uri("ms-appx:///FtpSharp/Assets/ftpYellow.png"));
                break;
            case 3:
                imageEntry.Source = new BitmapImage(new Uri("ms-appx:///FtpSharp/Assets/ftpGreen.png"));
                break;
            case 4:
                imageEntry.Source = new BitmapImage(new Uri("ms-appx:///FtpSharp/Assets/ftpBlue.png"));
                break;
            case 5:
                imageEntry.Source = new BitmapImage(new Uri("ms-appx:///FtpSharp/Assets/ftpPurple.png"));
                break;
            case 6:
                imageEntry.Source = new BitmapImage(new Uri("ms-appx:///FtpSharp/Assets/tpPink.png"));
                break;
            case 7:
                imageEntry.Source = new BitmapImage(new Uri("ms-appx:///FtpSharp/Assets/ftpTeal.png"));
                break;
        }
    }
    catch (Exception ex)
    {
        ContentDialog dialog = new ContentDialog
        {
            Title = "Exception found!",
            Content = ex.ToString(),
            CloseButtonText = "Understood"
        };
        await dialog.ShowAsync();
    }           
}

ViewBox / Image XAML

<Viewbox Grid.Column="2" Grid.Row="0" Grid.RowSpan="4" Margin="5,15,5,0">
    <Image x:Name="imageEntry" Source="Assets/SquircleX.png" Tapped="ImageEntry_TappedAsync" />
</Viewbox>

1 个答案:

答案 0 :(得分:4)

问题出在您正在使用的URI中-删除FtpSharp部分,例如:

ms-appx:///Assets/ftpRed.png

原因是ms-apps:///已经指向应用程序安装文件夹的根目录,因此Assets文件夹将直接部署在该目录中。