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

Foi útil?

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:Uidrelacionados 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 um StaticResource 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?:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top