Aplicativo da Windows store ResourceLoader em tempo de design
-
20-12-2019 - |
Pergunta
Eu comecei a criar um Aplicativo da Windows Store para o Windows 8.1 e agora me deparei com um problema em relação a localização.
Eu gostaria de apresentar um recurso de seqüência de caracteres a partir de um .resw arquivo em tempo de design, mas a cada tentativa de fazê-lo falhou, mesmo que ele funciona em tempo de execução.
Quando utilizar o x:atributo Uid, eu ainda tenho para abastecer a propriedade de Texto (por exemplo,para um TextBlock) e eu não gostaria de escrever o texto duas vezes.
Eu também tentei criar uma propriedade para a cadeia da viewmodel:
public string Title
{
get { return ResourceLoader.GetForCurrentView("Strings").GetString("MainView_Title"); }
}
Esse é um trabalho em tempo de execução, mas em tempo de design está em branco.
Então a pergunta é, existe uma forma de apresentar recursos de um .resw arquivo XAML-designer?
Mais especificamente, a classe ResourceManager permitir .resw arquivos para serem lidos em tempo de design?
Obrigado pela vossa ajuda, Lucas
Solução
Método Antigo
Assim, há um par de coisas que você pode fazer.
O primeiro (e mais simples, já que você está usando x:Uid
já) é apenas fornecer o texto no campo de Texto.O x:Uid
relacionados com o valor irá substituir o que está lá.
<TextBlock Text="MyText" x:Uid="MainView_Title"/>
O segundo método é usar a propriedade, como você já tem e, em seguida, verifique se o aplicativo está em Tempo de Design (através de um par de métodos diferentes), em seguida, retornar um valor constante se é e o Recurso, se é não.
public string Title
{
if(ViewModelBase.IsInDesignTimeStatic) //Mvvm Light's easy accessor
return "My Text";
return ResourceLoader.GetForCurrentView("Strings").GetString("MainView_Title");
}
Espero que isso ajude e codificação feliz!
Editar:Parece ser uma nova maneira de se fazer isso, pelo menos como a do Windows 8.1.
Novo Método
- Criar uma classe que faz referência a uma
ResourceLoader
(semelhante à propriedade descrita acima). Criar uma propriedade indexada acessor que aceita uma chave de seqüência de caracteres e retorna o valor da
ResourceLoader
.public class LocalizedStrings { public string this[string key] { get { return App.ResourceLoader.GetForViewIndependentUse().GetString(key); } } }
Em seu
App.xaml
, definir umStaticResource
deste tipo.<Application.Resources> <ResourceDictionary> <common:LocalizedStrings x:Key="Localized"/> </ResourceDictionary> </Application.Resources>
Agora, quando você quiser aceder à sua propriedade com chave de entrada MainView_Title
, use este.É mais detalhado, mas ele deve se traduzir no designer e na própria aplicação.
<TextBlock Text="{Binding Source={StaticResource Localized}, Path=[MainView_Title]}" />
Você pode embaralhar ele volta a ser um pouco mais legível se você gostaria de, tais como:
<TextBlock Text="{Binding [MainView_Title], Source={StaticResource Localized}}" />
Outras dicas
Essa é uma velha discussão, mas desde que Nate desde que tal uma solução elegante para o problema para o Win8.1 eu pensei em perguntar aqui...
Depois de muita investigação e experimentação, de Nate solução não aparecem para trabalhar para UWP apps para Win10 sob VS2017 Comunidade.O LocalizedString abordagem funciona muito bem em tempo de execução, mas parece
App.ResourceLoader.GetForViewIndependentUse().GetString(key);
recusa-se a devolver qualquer coisa, exceto a Seqüência de caracteres.Vazio durante o tempo de design.Eu fiz um monte de experiências e coisas assim
ResourceContext.GetForViewIndependentUse().QualifierValues
Parecem ser idênticos entre tempo de execução (trabalho) e de tempo de design (não de trabalho).
Eu queria saber se alguém encontrou isso e resolveu.Nate?:)