【问题标题】:WPF CurrentUICulture on CurrentThread changingWPF CurrentUICulture on CurrentThread 改变
【发布时间】:2016-03-15 18:33:00
【问题描述】:

我正在编写一个程序,它会在启动时改变程序文化。在 App.cs 中:

if (tokens[0].Equals("english"))
                {
                    System.Threading.Thread.CurrentThread.CurrentUICulture =
                        new System.Globalization.CultureInfo("en-US");
                }
                else if (tokens[0].Equals("portuguese"))
                {
                    System.Threading.Thread.CurrentThread.CurrentUICulture =
                        new System.Globalization.CultureInfo("pt-BR");
                }
                else if (tokens[0].Equals("spanish"))
                {

                    System.Threading.Thread.CurrentThread.CurrentUICulture =
                        new System.Globalization.CultureInfo("es-CO");

                }

我在这个切换之后立即打印出线程和 CurrentUICulture 名称。似乎没问题。

但是,然后在 TextBox 中的 GainKeyboardFocus 事件中,我会根据文化发生不同的事情。但是,它似乎无法正常工作。当我打印出线程和 CurrentUICulture 时,线程看起来是一样的(都是线程 1),但是 CurrentUICulture 又恢复了默认值。

【问题讨论】:

  • 我现在测试它。在 App 构造函数中添加 set UICulture 并在 TextBox 的 GotKeyboardFocus 中检查 - 它们是相同的。检查您的其他代码是否有错误。
  • 我认为发生的事情是 MainWindow 正在一个新线程上运行,它恰好与第一个线程具有相同的 ID。这意味着新线程(具有相同 ID)具有默认线程。你如何获得窗口正在运行的线程?
  • 我调用 System.Diagnostics.Debug.WriteLine($"{System.Threading.Thread.CurrentThread.ManagedThreadId} {System.Threading.Thread.CurrentThread.CurrentUICulture}");在 App.cs 和 MainWindow.xaml.cs 中 ManagedThreadId 对于应用程序中的线程是唯一的

标签: c# wpf textbox internationalization cultureinfo


【解决方案1】:

通过将System.Globalization.CultureInfo.DefaultCurrentUICulture 设置为新文化,我设法让它发挥作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多