不能键入“串”隐式转换为“Windows.UI.Xaml.Media.Imaging.BitmapI

2019-10-31 04:35发布

我试图显示存储在XAML设计内部本地目录中的图像。

我有路径局部图像。

ImagePage.xaml

<ScrollViewer>
    <ListView x:Name="ViewImage" SelectionMode="None" IsActiveView="True">
        <ListView.ItemsPanel>
             <ItemsPanelTemplate>
                 <WrapGrid Orientation="Horizontal" MaximumRowsOrColumns="1" />
             </ItemsPanelTemplate>
        </ListView.ItemsPanel>
        <ListView.ItemTemplate>
             <DataTemplate>
                 <Grid x:Name="imgGrid">
                      <Grid.RowDefinitions>
                          <RowDefinition Height="Auto" />
                          <RowDefinition Height="Auto" />
                      </Grid.RowDefinitions>
                      <StackPanel>
                          <Grid Height="50" Width="50">
                              <Grid Margin="2" Background="red">
                                  <Image Source="{Binding imgArt}" Stretch="UniformToFill"
                                         Height="40" Width="40"/>
                              </Grid>
                          </Grid>
                      </StackPanel>
                 </Grid>
             </DataTemplate>
         </ListView.ItemTemplate>
     </ListView>
</ScrollViewer>

ImagePage.xaml.cs

string strImgPath = "ms-appx:///Images/Music/localImg.png";
public string imgPath
{
     get { return strImgPath; }
}
imageClaz obj = new imageClaz();
obj.imgArt = imgPath;

imageClaz()

public class imageClaz
{
     public string imgArt { get; set; }
}

Answer 1:

如果你是针对WinRT的应用程序,你应该使用Windows.UI.Xaml.Media.Imaging.BitmapImage。

只要改变imgArt 320交织串的BitmapImage

public class imageClaz
{
     public BitmapImage imgArt { get; set; }
}

和设置图像这样的,

    string strImgPath = "ms-appx:///Images/Music/localImg.png";
    imageClaz obj = new imageClaz();
    obj.imgArt = new BitmapImage(new Uri(strImgPath, UriKind.Absolute));


Answer 2:

关于BitmapImage的两个答案都只是部分正确。 事实上XAML在转换器中的构建和你一定能传递有一个字符串 ,除非你提供一个转换器。 有可能是你的代码的几个问题:

  • 你不通知用户界面有关财产的变化-缺乏INotifyPropertyChanged的的:

    例如:

     public sealed partial class MainPage : Page, INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string name) { if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(name)); } } private string imgArt; public string ImgArt { get { return imgArt; } set { imgArt = value; OnPropertyChanged("ImgArt"); } } 
  • 第二件事情-我不知道你是否已经设置图像的DataContext或其父母:

     public MainPage() { this.InitializeComponent(); DataContext = this; } 

您可以将样品从GitHub下载 。



Answer 3:

源类型的ImageSource,不是字符串。 您可以设置这样的视图模型:

public class ImageClaz
{
    public ImageClaz(Uri uri)
    {
        this.ImgArt = new BitmapImage(uri);
    }

    public ImageSource ImgArt { get; set; }
}

当您使用路径来创建乌里:

var imgeClass = new ImageClaz(new Uri("ms-appx:///Images/Music/localImg.png"));


文章来源: Cannot implicitly convert type 'string' to 'Windows.UI.Xaml.Media.Imaging.BitmapImage