c# - 在 Winrt 和 MVVM 模式中显示来自 Uri 的图像

标签 c# mvvm windows-8 local-storage

因此,我创建了一个 Windows 应用商店应用程序(又名 Windows 8 应用程序/以前称为 Metro 应用程序)并导入了一个包含图像的 zip 存档(导入工作良好)。

当 zip 被提取(在它自己的文件夹中)时,我将代表文件夹的对象添加到 ObservableCollection 中。

此 ObservableCollection 用作 GridView 的 DataContext,文件夹的名称已正确显示,但文件夹的第一个图像不是... <= 所以我的问题。

提取完成后,我使用静态方法创建对象

public class ZipFolder
    {

        public string Title
        {
            get { return _title; }
            set { _title = value;}
        }
        public int CurrentPage
        {
            get { return _currentPage; }
            set { _currentPage = value;}
        }
        public Uri PathCover
        {
            get { return _pathCover;  }
            set { _pathCover = value;}
        }

        private string _title ;
        private int _currentPage;
        private Uri _pathCover;

    }

public static async Task<ZipFolderObject> CreateComic(StorageFolder folder)
{
    ZipFolderObject o = new ZipFolderObject();
    o.Title = folder.DisplayName;

    IReadOnlyList<StorageFile> asyncOperation = await folder.GetFilesAsync();
    StorageFile cover = asyncOperation[0];

    o.PathCover = new Uri("ms-appdata:///local/" + folder.Name + "/" + cover.Name);

    return o;
}

绑定(bind)看起来像这样:
<DataTemplate x:Key="zipFolderItemTemplate">
        <StackPanel Width="165" Height="250">
            <Grid Height="215">
                <Border Background="Bisque" Width="{Binding ActualWidth, ElementName=image}">
                    <!--<Image x:Name="image" VerticalAlignment="Top" HorizontalAlignment="Center" Source="{Binding Cover}" />-->
                    <Image Stretch="Uniform" x:Name="image" VerticalAlignment="Top" HorizontalAlignment="Center">
                        <Image.Source>
                            <BitmapImage   UriSource="{Binding PathCover}" />
                        </Image.Source>
                    </Image>
                </Border>
                <Polygon Points="0,0 0,50, 50,0" Stroke="Red" FillRed" RenderTransformOrigin="0.5,0.5" Visibility="{Binding CurrentPage, Converter={StaticResource BookmarkVisibilityConverter}}" Width="{Binding ActualWidth, ElementName=image}" />
            </Grid>
            <TextBlock HorizontalAlignment="Center" TextWrapping="Wrap" VerticalAlignment="Top" Text="{Binding Title}" Margin="0,10,0,0" Foreground="Black" />
        </StackPanel>
    </DataTemplate>

因此,如果有人对我的问题有提示,那就太好了!

最佳答案

您只能在图像源上使用目录/文件名.ext,如果提取图像,则为子目录。
连接两个值并设置为 PathCover 属性:

 folder.Name + "/" + cover.Name

并在本节编辑数据模板:
<Image Stretch="Uniform" x:Name="image" VerticalAlignment="Top" HorizontalAlignment="Center" Source={Binding PathCover}/>  

问候。

关于c# - 在 Winrt 和 MVVM 模式中显示来自 Uri 的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13843852/

相关文章:

c# - 使用 MVVM 将 URL 加载到 WebBrowser

c# - 你如何导航到 Metro 应用程序中的新页面?

Windows 8 : How to disable touch in Flipview control?

c# - Entity Framework 核心模型

c# - 使用 Join、LINQ 然后 Split 从存储过程中获取 n 个绑定(bind)数据。使用多个结果,Linq2SQL

c# - 从 Delphi 调用 C# dll

c# - 将命令绑定(bind)到 DataGrid 中的元素

c# - 如何通过 ViewModel 转到 DataGrid 中的特定行号

javascript - 使用 preload.js 和 create.js 加载图像?

c# - 如何在 C# Winforms 中向标签添加提示或工具提示?