2015-11-11 7 views
1

У меня есть окно в приложении, которое используется для покупки продуктов. Теперь есть два варианта Local или Foreign. Если пользователь нажимает на локальную валюту, которая является строковым форматом мой курс для хранения текстовых полей и сумма должны иметь евро в качестве валюты, и если пользователь выбирает иностранный, он должен быть долларом.WPF - Как изменить языковое свойство окна динамически

Window_Purchase.Language =?

Window_Purchase - это имя моего окна.

Как я могу изменить языковое свойство во время выполнения. Я не хочу менять текстовый язык только в формате валюты. Спасибо заранее.

ответ

0

Если я получу право, вы не сможете изменить информацию о культуре в приложении?

Application.CurrentCulture = System.Globalization.GetCultureInfo("en-us"); 

https://msdn.microsoft.com/en-us/library/system.windows.forms.application.currentculture(v=vs.110).aspx

+0

Нет, я просто хочу его для конкретного окна не требуется для всего приложения – user5552042

+0

я попробовал ваш данный код .the класс приложение не имеет CurrentCulture свойства – user5552042

0

Попробуйте instend для текущей формы

System.Windows.FrameworkElement.LanguageProperty.OverrideMetadata( 
       typeof(System.Windows.FrameworkElement), 
       new System.Windows.FrameworkPropertyMetadata( 
        System.Windows.Markup.XmlLanguage.GetLanguage(System.Globalization.CultureInfo.CurrentCulture.IetfLanguageTag))); 
1

Если у вас есть 2 или более файлов ресурсов, например:
(Они должны быть добавлены при Properties в Solution Explorer)

Resources.resx enter image description here

Resources.de.resx enter image description here

Они могут быть динамически переключаться с помощью реализации INotifyPropertyChanged следующий класс.

namespace WpfApplication1.Properties 
{ 
    using System.Globalization; 
    using System.ComponentModel; 
    using System.Runtime.CompilerServices; 
    using Properties; 

    public class ResourceService : INotifyPropertyChanged 
    { 
     #region singleton members 

     private static readonly ResourceService _current = new ResourceService(); 
     public static ResourceService Current 
     { 
      get { return _current; } 
     } 
     #endregion 

     readonly Properties.Resources _resources = new Properties.Resources(); 

     public Properties.Resources Resources 
     { 
      get { return this._resources; } 
     } 

     #region INotifyPropertyChanged members 

     public event PropertyChangedEventHandler PropertyChanged; 

     protected virtual void RaisePropertyChanged([CallerMemberName] string propertyName = null) 
     { 
      var handler = this.PropertyChanged; 
      if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 

     #endregion 

     public void ChangeCulture(string name) 
     { 
      Resources.Culture = CultureInfo.GetCultureInfo(name); 
      this.RaisePropertyChanged("Resources"); 
     } 
    } 
} 

и текст (валюта) вы хотите изменить должен связать это получить PropertyChanged событие, как это:

<!-- Add xmlns:properties--> 
<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:properties="clr-namespace:WpfApplication1.Properties"> 

<TextBlock Text="{Binding Source={x:Static properties:ResourceService.Current}, Path=Resources.Currency, Mode=OneWay}" 

Затем, вы можете изменить Culture (Resources) динамически.
Например:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    ResourceService.Current.ChangeCulture("de"); 
} 
+0

Как у добавить € в строке значение файла ресурсов? – user5552042

+0

@ user5552042 просто скопировал и вставил его. – jhmt

Смежные вопросы