我想在我的自定义库中显示存储在Windows Phone 8照片文件夹中的所有图像,该图库ListBox用于显示图像.
的ListBox代码如下:
<phone:PhoneApplicationPage.Resources>
<MyApp:PreviewPictureConverter x:Key="PreviewPictureConverter" />
</phone:PhoneApplicationPage.Resources>
<ListBox Name="previewImageListbox" VirtualizingStackPanel.VirtualizationMode="Recycling">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel CleanUpVirtualizedItemEvent="VirtualizingStackPanel_CleanUpVirtualizedItemEvent_1">
</VirtualizingStackPanel>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Image Source="{Binding Converter={StaticResource PreviewPictureConverter}}" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)
使用以下转换器:
public class PreviewPictureConverter : System.Windows.Data.IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
PreviewImageItem c = value as PreviewImageItem;
if (c == null)
return null;
return c.ImageData;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) …Run Code Online (Sandbox Code Playgroud) 我使用以下代码显示来自网络服务器的图像:
<Image Source="{Binding Url}" />
Run Code Online (Sandbox Code Playgroud)
图像会自动下载,我假设还有一些基于Url的缓存.
我的问题是,当应用程序处于脱机状态时,可能无法显示缓存的图像.
有没有办法改变缓存行为,以便在没有网络可用时加载图像?有关缓存的文档指针也非常有用.
我一直在研究WP7应用程序,它的图像库应用程序,实现了基本的缩放和轻弹手势.
出于测试目的,我使用设置为Content的离线图像(它们的文件名已编号)编译应用程序,并通过硬编码字符串(稍后将替换)访问它们.
但后来意识到应用消耗了大量内存.我以为这是由于图像并发现了这个博客 ; 图像总是缓存.我使用博客中的代码来纠正这个问题.虽然消费率确实下降,但仍未释放内存.
为了最后的尝试,我创建了另一个带有基本功能2按钮的测试应用程序,用于图像的导航和图像控制,只是为了确保它不是我的手势代码可能是问题.
这是xaml
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Image Grid.Row="0" x:Name="ImageHolder" Height="Auto" Width="Auto" Stretch="Uniform" Tap="image_Tap" />
<TextBlock x:Name="MemUsage" />
<StackPanel Grid.Row="1" Orientation="Horizontal">
<Button x:Name="PrevButton" Content="Prev" Width="240" Click="btnPrev_Click"/>
<Button x:Name="NextButton" Content="Next" Width="240" Click="btnNext_Click"/>
</StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)
这是.cs文件
const int PAGE_COUNT = 42;
int pageNum = 0;
public MainPage()
{
InitializeComponent();
RefreshImage();
}
private void btnPrev_Click(object sender, RoutedEventArgs e)
{
pageNum = (PAGE_COUNT + pageNum - 1) % PAGE_COUNT; // cycle to …Run Code Online (Sandbox Code Playgroud) 当我尝试显示图像网格时,我在Windows手机上有"内存不足"异常.我玩了一点代码,认为这Grid.Children.Add给了我那个错误.
我创建了自定义类,显示灰色矩形,加载图像后,它显示图像而不是该矩形.这里是:
class ImageWIthLoader
{
private BitmapImage m_loader_bitmap;
private BitmapImage m_source_bitmap;
private Image m_image;
public Image image
{
get { return m_image; }
}
//url - url to 120x120 image; width, height = 120 both
public ImageWIthLoader(string url, int width, int height)
{
m_image = new Image();
m_loader_bitmap = new BitmapImage(new Uri("Assets/Images/image_await_background.png", Uri Kind.Relative));
m_loader_bitmap.DecodePixelWidth = width;
m_loader_bitmap.DecodePixelHeight = height;
m_image.Source = m_loader_bitmap;
m_source_bitmap = new BitmapImage(new Uri(url));
m_source_bitmap.CreateOptions = BitmapCreateOptions.None;
m_source_bitmap.ImageOpened += bitmapLoaded;
}
private void bitmapLoaded(object …Run Code Online (Sandbox Code Playgroud)