无法隐式转换类型'字符串'到' Windows.UI.Xaml.Media.Imaging.BitmapImage

时间:2014-11-27 05:22:51

标签: c# xaml windows-phone-8 windows-phone-8.1

我正在尝试在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; }
}

3 个答案:

答案 0 :(得分:4)

关于 BitmapImage 的两个答案都只是部分正确。事实上,XAML有一个内置转换器,除非你提供转换器,否则你肯定可以传递一个字符串。您的代码中可能存在一些问题:

  • 您没有通知UI有关该属性的更改 - 缺少 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;
    } 
    

您可以download from GitHub的示例。

答案 1 :(得分:1)

如果您要定位WinRT应用,则应使用Windows.UI.Xaml.Media.Imaging.BitmapImage。

只需将imgArt froms字符串更改为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));

答案 2 :(得分:1)

Source的类型为ImageSource,而不是字符串。您可以使用以下内容设置视图模型:

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

    public ImageSource ImgArt { get; set; }
}

使用路径创建Uri:

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