Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original
Este tópico ainda não foi avaliado como - Avalie este tópico

Recurso de aplicativo do WPF, conteúdo e arquivos de dados

Microsoft Windowsaplicativos geralmente dependem de arquivos que contêm dados não-executável, como Extensible Application Markup Language (XAML), imagens, vídeo e áudio. Windows Presentation Foundation (WPF)oferece suporte especial para configurar, identificando e uso desses tipos de arquivos de dados, que são chamados de arquivos de dados do aplicativo. Esse suporte gira em torno de um conjunto específico de tipos de arquivos de dados de aplicação, incluindo:

  • Arquivos de recurso: arquivos de dados que são compilados em um executável ou assembly WPF de biblioteca.

  • Arquivos de Conteúdo: arquivos de dados independentes que têm uma associação explícita com um assembly WPF executável.

  • Locais de Arquivos de Origem: arquivos de dados independentes que não têm uma associação com um assembly WPF executável.

Uma distinção importante a se fazer entre esses três tipos de arquivos é que arquivos de recurso e arquivos de conteúdo são conhecidos em tempo de compilaçao; um assembly não tem conhecimento explícito sobre eles. Para local de arquivos de origem, entretanto, um assembly pode não ter qualquer conhecimento sobre eles, ou conhecimento implícito através de um pacote de referência uniform resource identifier (URI); nesse último caso, não há garantias que o local referenciado de arquivo de origem realmente existe.

Para referenciar arquivos de dados de aplicação, Windows Presentation Foundation (WPF) utiliza o esquema Pack uniform resource identifier (URI), que é descrito em detalhes em Pack URIs no WPF.

Este tópico descreve como configurar e utilizar arquivos de dados de aplicação.

Este tópico contém as seções a seguir.

Se um arquivo de dados de aplicação deve estar sempre disponível para uma aplicação, a única maneira de garantir a disponibilidade é compilá-lo em um assembly executável principal da aplicação ou em um de seus assemblies referenciados. Esse tipo de arquivo de dados de aplicação é conhecido como arquivo de recurso.

Você deve utilizar arquivos de recurso quando:

  • Você não precisa atualizar o conteúdo do arquivo de recursos após ser compilado em um assembly.

  • Você quer simplificar a complexidade da distribuição da aplicação reduzindo o número de dependências de arquivos.

  • Seu arquivo de dados de aplicação precisa ser localizável (veja A globalização do WPF e visão geral da localização).

Observação Observação

Os arquivos de recursos descritos nesta seção são diferentes do que os arquivos de recursos descrito em Recursos XAML e diferente do que os recursos incorporados ou vinculados, descritos em Gerenciamento de recursos de aplicativo.

Aa970494.collapse_all(pt-br,VS.110).gifConfigurando Arquivos de Recursos

Em WPF, um arquivo de recursos é um arquivo incluído em um projeto Microsoft build engine (MSBuild) como um item Resource.

<Project "xmlns=http://schemas.microsoft.com/developer/msbuild/2003" ... >
  ...
  <ItemGroup>
    <Resource Include="ResourceFile.xaml" />
  </ItemGroup>
  ...
</Project>
ObservaçãoObservação

Em Microsoft Visual Studio, você cria um arquivo de recursos acrescentando um arquivo a um projeto e definindo seu Build Action como Resource.

Quando o projeto é compilado, MSBuild compila o recurso para dentro do assembly.

Aa970494.collapse_all(pt-br,VS.110).gifUtilizando Arquivos de Recursos

Para carregar um arquivo de recurso, você pode chamar o GetResourceStream método da Application classe, passando de um pacote de URI que identifica o arquivo de recurso desejado. GetResourceStream Retorna um StreamResourceInfo objeto, que expõe o arquivo de recurso como um Stream e descreve seu tipo de conteúdo.

Como um exemplo, o código a seguir mostra como utilizar GetResourceStream para carregar um arquivo de recursos Page e defini-lo como o conteúdo de um Frame (pageFrame):


// Navigate to xaml page
Uri uri = new Uri("/PageResourceFile.xaml", UriKind.Relative);
StreamResourceInfo info = Application.GetResourceStream(uri);
System.Windows.Markup.XamlReader reader = new System.Windows.Markup.XamlReader();
Page page = (Page)reader.LoadAsync(info.Stream);
this.pageFrame.Content = page;


Embora chamar GetResourceStream lhe dê acesso ao Stream, você precisa realizar trabalho adicional de convertê-lo para o tipo de propriedade que você vai definir com ele. Em vez disso, você pode deixar WPF cuidar da abertura e conversão de Stream carregando um arquivo de recursos diretamente na propriedade de um tipo utilizando código.

O exemplo a seguir mostra como carregar Page diretamente em um Frame (pageFrame) utilizando código.


Uri pageUri = new Uri("/PageResourceFile.xaml", UriKind.Relative);
this.pageFrame.Source = pageUri;


O exemplo a seguir mostra o equivalente em marcação do exemplo anterior.


<Frame Name="pageFrame" Source="PageResourceFile.xaml" />


Aa970494.collapse_all(pt-br,VS.110).gifArquivos de Código de Aplicação como Arquivos de Recurso

Um conjunto especial de arquivos de código de aplicação WPF pode ser referenciado utilizando pacote URIs incluindo janelas, páginas, documentos de fluxo e dicionários de recursos. Por exemplo, você pode definir a propriedade Application.StartupUri com um pacote URI que referencia a janela ou página que você gostaria de carregar quando uma aplicação inicia.


<Application
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    StartupUri="SOOPage.xaml" />


Você pode fazer isso quando um arquivo XAML é incluído em um projeto Microsoft build engine (MSBuild) como um item Page.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ... >
  ...
  <ItemGroup>
    <Page Include="MainWindow.xaml" />
  </ItemGroup>
  ...
</Project>
ObservaçãoObservação

Em Visual Studio, você acrescenta um novo Window, NavigationWindow, Page, FlowDocument ou ResourceDictionary a um projeto, o Build Action para o arquivo de marcação vai ser por default Page.

Quando um projeto com itens Page é compilado, os itens XAML são convertidos em formato binário e compilados para dentro do assembly associado. Consequentemente, esses arquivos podem ser utilizados da mesma maneira que arquivos de recursos típicos.

ObservaçãoObservação

Se um arquivo XAML é configurado como um item Resource, e não tem um arquivo code-behind, o XAML bruto é compilado em um assembly em vez de uma versão binária do XAML bruto.

Um arquivo de conteúdo é distribuído como arquivo avulso juntamente com um assembly executável. Apesar de não serem compilados em um assembly, assemblies são compilados com metadados que estabelecem uma associação com cada arquivo de conteúdo.

Você deve utilizar arquivos de conteúdo quando sua aplicação requerer um conjunto específico de arquivos de dados de aplicação que você pode querer atualizar sem recompilar o assembly que os consome.

Aa970494.collapse_all(pt-br,VS.110).gifConfigurando Arquivos de Conteúdo

Para adicionar um arquivo de conteúdo a um projeto, um arquivo de dados do aplicativo deve ser incluído como um Content item. Além disso, como um arquivo de conteúdo não é compilado diretamente no assembly, você deverá definir o MSBuildCopyToOutputDirectory o elemento de metadados para especificar que o arquivo de conteúdo é copiado para um local que é relativo ao assembly incorporado. Se você quer quer o recurso seja copiado para a pasta de saída de compilação toda vez que o projeto for compilado, você define o elemento de metadados CopyToOutputDirectory com o valor Always. Caso contrário, você pode assegurar que somente a versão mais nova do recurso seja copiada para a pasta de saída de compilação utilizando o valor PreserveNewest.

O seguinte mostra um arquivo configurado como um arquivo de conteudo que é copiado para a pasta de saída de compilação apenas quando uma nova versão do recurso é acrescentada ao projeto.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ... >
  ...
  <ItemGroup>
    <Content Include="ContentFile.xaml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
  ...
</Project>
ObservaçãoObservação

Em Visual Studio, você cria um arquivo de conteúdo acrescentando um arquivo a um projeto e definindo seu Build Action como Content, e define seu Copy to Output Directory como Copy always (o mesmo que Always) e Copy if newer (o mesmo que PreserveNewest).

Quando o projeto é compilado, um atributo AssemblyAssociatedContentFileAttribute é compilado nos metadados do assembly de cada arquivo de conteúdo.

[assembly: AssemblyAssociatedContentFile("ContentFile.xaml")]

O valor do AssemblyAssociatedContentFileAttribute implica o caminho para o arquivo de conteúdo relativo à sua posição no projeto. Por exemplo, se um arquivo de conteúdo estava localizado em uma subpasta do projeto, a informação de caminho adicional seria incorporada ao valor AssemblyAssociatedContentFileAttribute.

[assembly: AssemblyAssociatedContentFile("Resources/ContentFile.xaml")]

O valor do AssemblyAssociatedContentFileAttribute também é o valor do caminho para o arquivo de conteúdo na pasta de saída de compilação.

Aa970494.collapse_all(pt-br,VS.110).gifUtilizando Arquivos de Conteúdo

Para carregar um arquivo de conteúdo, você pode chamar o GetContentStream método da Application classe, passando de um pacote de URI que identifica o arquivo de conteúdo desejado. GetContentStream Retorna um StreamResourceInfo objeto, que expõe o arquivo de conteúdo como um Stream e descreve seu tipo de conteúdo.

Como um exemplo, o código a seguir mostra como utilizar GetContentStream para carregar um arquivo de conteúdo Page e defini-lo como o conteúdo de um Frame (pageFrame):


// Navigate to xaml page
Uri uri = new Uri("/PageContentFile.xaml", UriKind.Relative);
StreamResourceInfo info = Application.GetContentStream(uri);
System.Windows.Markup.XamlReader reader = new System.Windows.Markup.XamlReader();
Page page = (Page)reader.LoadAsync(info.Stream);
this.pageFrame.Content = page;


Embora chamar GetContentStream lhe dê acesso ao Stream, você precisa realizar trabalho adicional de convertê-lo para o tipo de propriedade que você vai definir com ele. Em vez disso, você pode deixar WPF cuidar da abertura e conversão de Stream carregando um arquivo de recursos diretamente na propriedade de um tipo utilizando código.

O exemplo a seguir mostra como carregar Page diretamente em um Frame (pageFrame) utilizando código.


Uri pageUri = new Uri("/PageContentFile.xaml", UriKind.Relative);
this.pageFrame.Source = pageUri;


O exemplo a seguir mostra o equivalente em marcação do exemplo anterior.


<Frame Name="pageFrame" Source="PageContentFile.xaml" />


Arquivos de recurso têm um relacionamento explícito com os assemblies com que eles são distribuídos, conforme definido pelo AssemblyAssociatedContentFileAttribute. Mas, há momentos em que você pode querer estabelecer um relacionamento implícito ou inexistente entre um assembly e um arquivo de dados de aplicação, incluindo quando:

  • Um arquivo não existe em tempo de compilação.

  • Você não sabe que seu conjunto exigirá até que o tempo de execução de arquivos.

  • Você quer poder atualizar arquivos sem recompilar o assembly ao qual estão associados.

  • Sua aplicação utiliza arquivos de dados grandes, tais como áudio e vídeo, e você só quer que os usuários efetuem o seu download se assim escolherem.

É possível carregar esses tipos de arquivos utilizando esquemas tradicionais URI, tais como esquemas file:/// e http://.


<Image Source="file:///C:/DataFile.bmp" />
<Image Source="http://www.datafilewebsite.com/DataFile.bmp" />


Entretanto, os esquemas file:/// e http:// requerem que sua aplicafile:/// and http:// são tenha confiança total. Se sua aplicação é um XAML browser application (XBAP) que foi iniciada pela Internet ou intranet, e solicita apenas o conjunto de permissões permitido para aplicações iniciadas dessas localizações, arquivos avulsos so podem ser carregados do local de origem da aplicação (localização da inicialização). Tais arquivos são conheciso como arquivos de local de origem.

Arquivos de local de origem são a única opção para aplicações de confiança parcial, apesar de não serem limitados a aplicações de confiança parcial. Aplicações de confiança total podem ainda precisar carregar arquivos de dados que não conheciam em tempo de compilação; embora aplicações de confiança total possam utilizar file:///, é provável que os arquivos de dados de aplicaçao serão instalados na mesma pasta ou numa subpasta do assembly da aplicação. Nesse caso, utilizar o referenciamento ao local de origem é mais fácil do que utilizar file:///, porque utilizar file:/// requer que você utilize o caminho completo do arquivo.

Observação Observação

Arquivos de local de origem não são armazenados em cache com um XAML browser application (XBAP) em uma máquina cliente, enquanto arquivos de conteúdo o são. Consequentemente, só é efetuado seu download quando solicitados especificamente. Se uma aplicação XAML browser application (XBAP) possui arquivos de mídia grandes, configurá-lo como arquivos de local de origem significa que o disparo inicial da aplicação é muito mais rápido, e que o download dos arquivos é feito sob demanda.

Aa970494.collapse_all(pt-br,VS.110).gifConfigurando Arquivos de Local de Origem

Se os seus arquivos de local de origem são inexistentes ou desconhecidos em tempo de compilação, você precisa utilizar mecanismos tradicionais de implantação para assegurar que os arquivos requeridos estão disponíveis em tempo de execução, incluindo utilizar o programa de linha de comando XCopy ou o Microsoft Windows Installer.

Se você conhece em tempo de compilação os arquivos que você gostaria que estivessem localizados no local de origem, mas ainda quer evitar uma dependência explícita, você pode acrescentar esses arquivos a um projeto Microsoft build engine (MSBuild) como item None. Como com os arquivos de conteúdo, você precisará definir a MSBuildCopyToOutputDirectory atributo para especificar que o site do arquivo de origem é copiado para um local que é relativo ao assembly incorporado, especificando a Always valor ou a PreserveNewest valor. 

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ... >
  ...
  <None Include="PageSiteOfOriginFile.xaml">
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </None>
  ...
</Project>
ObservaçãoObservação

Em Visual Studio, você cria um arquivo de local de origem acrescentando um arquivo a um projeto e definindo seu Build Action como None.

Quando o projeto é compilado, MSBuild copia os arquivos especificados para a pasta de saída de compilação.

Aa970494.collapse_all(pt-br,VS.110).gifUtilizando Arquivos de Local de Origem

Para carregar um site do arquivo de origem, você pode chamar o GetRemoteStream método da Application classe, passando de um pacote de URI que identifica o site desejado do arquivo de origem. GetRemoteStream Retorna um StreamResourceInfo objeto, que expõe o site do arquivo de origem como um Stream e descreve seu tipo de conteúdo.

Como um exemplo, o código a seguir mostra como utilizar GetRemoteStream para carregar um arquivo de recursos Page e defini-lo como o conteúdo de um Frame (pageFrame):


// Navigate to xaml page
Uri uri = new Uri("/SiteOfOriginFile.xaml", UriKind.Relative);
StreamResourceInfo info = Application.GetRemoteStream(uri);
System.Windows.Markup.XamlReader reader = new System.Windows.Markup.XamlReader();
Page page = (Page)reader.LoadAsync(info.Stream);
this.pageFrame.Content = page;


Embora chamar GetRemoteStream lhe dê acesso ao Stream, você precisa realizar trabalho adicional de convertê-lo para o tipo de propriedade que você vai definir com ele. Em vez disso, você pode deixar WPF cuidar da abertura e conversão de Stream carregando um arquivo de recursos diretamente na propriedade de um tipo utilizando código.

O exemplo a seguir mostra como carregar Page diretamente em um Frame (pageFrame) utilizando código.


Uri pageUri = new Uri("pack://siteoforigin:,,,/SiteOfOriginFile.xaml", UriKind.Absolute);
this.pageFrame.Source = pageUri;


O exemplo a seguir mostra o equivalente em marcação do exemplo anterior.


<Frame Name="pageFrame" Source="pack://siteoforigin:,,,/SiteOfOriginFile.xaml" />


Após mudar o tipo de compilação de um arquivo de dados de aplicação, você precisa recompilar toda a aplicação para assegurar que as modificações sejam aplicadas. Se você apenas compilar a aplicação, as alterações não são aplicadas.

Isso foi útil para você?
(1500 caracteres restantes)

Contribuições da comunidade

ADICIONAR
© 2013 Microsoft. Todos os direitos reservados.