代码之家  ›  专栏  ›  技术社区  ›  Keven M

UWP图像未更新/重新加载

  •  0
  • Keven M  · 技术社区  · 5 年前

    我知道有很多类似的问题,但到目前为止,还没有一个解决问题或显示出一个可行的解决方案。

    在UWP应用程序中,我有一个 Image (在一个 ViewBox )其源由用户选择新图像来更改。我已经确认代码中没有抛出异常,下面的switch案例中的所有内容都工作得很好。我试过用 InvalidateArrange() , InvalidateMeasure() ,和 UpdateLayout() 在图像上,和 更新布局() 视图框 ,但似乎什么都没用。代码运行时会删除初始图像,但不会显示新图像,它只是显示一个空格。

    有人能看一下下面的代码,看看你能不能找到问题?我确信这是我忽略的一件简单的事情,我只是好像找不到它是什么。

    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();
        }           
    }
    

    可视框/图像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>
    
    0 回复  |  直到 5 年前
        1
  •  4
  •   Martin Zikmund    5 年前

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

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

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