如何在 UWP 应用程序中加载和绑定便携式库中包含的图像?
How to load and bind a image contained in a portable library within an UWP app?
我正在做一个 UWP 应用程序,我很难用 UWP 应用程序加载和绑定图像,应该怎么做?
我目前的结构:
MyApp.Model:
|
|-Models
|-MyModel.cs
|-MyModelContainer.cs
|-Resources
|-image1.png
|-image2.png
|-image3.png
我的 Xaml 在另一个项目中(win 10 通用应用程序并引用此便携式 class 库。)
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>^
我的问题:
- 我应该使用什么类型的 属性 来绑定图像(我认为它是
BitmapImage
?
- 我应该如何创建这个 属性?我尝试了
Icon = new BitmapImage(new Uri("ms-appx://MyApp.Model/Resources/image1.png"))
但没有任何运气,我没有加载图像(并且触发了 ImageFailed 事件)。
- 我应该如何将此 属性 绑定到
<Image/>
?
这是一个 UWP(windows 10) 应用程序,不是 WPF,不是 win8。
非常感谢。
编辑
这是文件夹结构
MyApp == AstroApp
MyApp.Model == AstroApp.Model
MyModel = AstroSign
MyModelContainer = AstroManager
如果您的图像与您的 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"));
}
};
}
}
如果您的图像在另一个程序集中,请使用此 url:
Icon = new BitmapImage(new Uri("ms-appx:///NameOfProjectWithImage/Resources/image1.png"));
我正在做一个 UWP 应用程序,我很难用 UWP 应用程序加载和绑定图像,应该怎么做?
我目前的结构:
MyApp.Model:
|
|-Models
|-MyModel.cs
|-MyModelContainer.cs
|-Resources
|-image1.png
|-image2.png
|-image3.png
我的 Xaml 在另一个项目中(win 10 通用应用程序并引用此便携式 class 库。)
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>^
我的问题:
- 我应该使用什么类型的 属性 来绑定图像(我认为它是
BitmapImage
? - 我应该如何创建这个 属性?我尝试了
Icon = new BitmapImage(new Uri("ms-appx://MyApp.Model/Resources/image1.png"))
但没有任何运气,我没有加载图像(并且触发了 ImageFailed 事件)。 - 我应该如何将此 属性 绑定到
<Image/>
?
这是一个 UWP(windows 10) 应用程序,不是 WPF,不是 win8。
非常感谢。
编辑
这是文件夹结构
MyApp == AstroApp
MyApp.Model == AstroApp.Model
MyModel = AstroSign
MyModelContainer = AstroManager
如果您的图像与您的 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"));
}
};
}
}
如果您的图像在另一个程序集中,请使用此 url:
Icon = new BitmapImage(new Uri("ms-appx:///NameOfProjectWithImage/Resources/image1.png"));