如何在UWP应用程序中加载和绑定可移植库中包含的图像?

时间:2016-04-18 20:02:54

标签: c# xaml win-universal-app uwp-xaml

我正在使用UWP应用,而且我很难用UWP应用加载和绑定图像,应该怎么做?

我目前的结构:

MyApp.Model:
 |
 |-Models
   |-MyModel.cs
   |-MyModelContainer.cs
 |-Resources
   |-image1.png
   |-image2.png
   |-image3.png

我的Xaml在另一个项目中(赢得10个通用应用程序并引用此可移植类库。)

MyModelContainer只是一个实例化IEnumerable<MyModel>的单例容器。以下是他们的内容:

public class MyModel{
    public String Name{get;set;}
    public ??????? Icon {get;set;}
}

public static class MyModelContainer{
    private static IEnumerable<MyModel> _myModelList;

    public static IEnumerable<MyModel> MyModelList{get{
        if(_myModelList==null){
            Initialize();
        }
        return _myModelList;
    }}

    private static Initialize(){
        _myModelList = new List<MyModel>() {
            new MyModel(){
                Name = "Model one"
                Icon = ???????
            }
        };
    }
}

在我的XAML中的某个位置,我在MyModel中收到ItemsControl的列表:

<ItemsControl  ItemsSource="{Binding MyModelListProperty}"  >
    <ItemsControl.ItemsPanel >
        <ItemsPanelTemplate>
            <StackPanel/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate >
            <Button Margin="10" MinHeight="50" MinWidth="40"  HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*"></RowDefinition>
                        <RowDefinition Height="Auto"></RowDefinition>
                    </Grid.RowDefinitions>
                    <Image Source="{Binding Icon}" ></Image>
                    <TextBlock Grid.Row="1" Text="{Binding Name}" ></TextBlock>
                </Grid>
            </Button>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>^

我的问题:

  1. 我应该用什么类型的属性绑定图像(我认为它是BitmapImage
  2. 我应该如何创建此属性?我试了Icon = new BitmapImage(new Uri("ms-appx://MyApp.Model/Resources/image1.png"))没有运气,我没有加载图片(并且触发了ImageFailed事件)。
  3. 我应该如何将此属性绑定到<Image/>
  4. 这适用于UWP(Windows 10)应用,而不是WPF,而不是win8。

    非常感谢。

    修改

    这是文件夹结构

    MyApp == AstroApp
    MyApp.Model == AstroApp.Model
    MyModel = AstroSign
    MyModelContainer = AstroManager
    

    enter image description here

1 个答案:

答案 0 :(得分:2)

如果您的图像与MyModelContainer位于同一个项目中,则应该可以使用:

public class MyModel{
    public String Name{get;set;}
    public ImageSource Icon {get;set;}
}

public static class MyModelContainer{
    private static IEnumerable<MyModel> _myModelList;

    public static IEnumerable<MyModel> MyModelList{get{
        if(_myModelList==null){
            Initialize();
        }
        return _myModelList;
    }}

    private static Initialize(){
        _myModelList = new List<MyModel>() {
            new MyModel(){
                Name = "Model one"
                Icon = new BitmapImage(new Uri("ms-appx:///Resources/image1.png"));
            }
        };
    }
}

如果您的图片位于其他装配体中,请使用此网址:

Icon = new BitmapImage(new Uri("ms-appx:///NameOfProjectWithImage/Resources/image1.png"));