2013-05-07 1 views
1

В приложении я пытаюсь использовать формат даты 24 часа, но столкнулся с проблемой, когда мои привязки в xaml все еще возвращаются к отображению 12 часовой форматКак получить WPF для принудительного использования с использованием 24-часового формата времени в привязках

Перед отображением пользовательского интерфейса я обновляю объект CultureInfo с ЧЧ: мм и ЧЧ: мм: ss как форматы «Короткие и длинные».

Затем в пользовательском интерфейсе, я связываю с DateTime объекта с FormatString в связывающем

<TextBlock Text="{Binding TimeTest, StringFormat=t}" /> 

Я ожидаю, что я хотел бы видеть 17:33, но в конечном итоге увидит 5:33 PM. Обходной путь, который мы нашли, - это передать текущую культуру, но хотелось бы избежать необходимости делать это на каждой привязке, которая потенциально использует время.

<TextBlock Text="{Binding Date, StringFormat=t, ConverterCulture={x:Static gl:CultureInfo.CurrentCulture}}" /> 
+0

Существует аналогичная дискуссия о SO уже. [использование в реальном CultureInfo-CurrentCulture-в-Wpf-связывающий-не-CultureInfo-из-ietfl] [1] [1]: http://stackoverflow.com/questions/ 5831455/use-real-cultureinfo-currentculture-in-wpf-binding-not-cultureinfo-from-ietfl –

ответ

0

вы можете получить класс от Binding, которые Предзадание ConverterCulture, и использовать это вместо того, чтобы оригинальный переплет, как

Public Class Binding 
     Inherits System.Windows.Data.Binding 

     Public Sub New() 
      MyBase.New() 
      ConverterCulture = System.Globalization.CultureInfo.CurrentCulture 
     End Sub 
     Public Sub New(ByVal path As String) 
      MyBase.New(path) 
      ConverterCulture = System.Globalization.CultureInfo.CurrentCulture 
     End Sub 
    End Class 

и

<TextBlock Text="{my:Binding TimeTest, StringFormat=t}" /> 

Вы также можете попробовать собственный StringFormat, например StringFormat = 'HH: mm'

+0

Глядя на все различные решения, его немного странно, что нет простого способа сделать это, когда вы ожидаете, что он просто сработает. В конце концов, я думаю, что мы закончим этот путь или выполним пользовательский «IValueConverter» + «MarkupExtension», который обрабатывает отображение/разбор по мере необходимости. –

0

Согласно documentation для ConverterCulture собственности:

В XAML это [...] наследует значение от корневого элемента (или любого элемента) страницы.

Это не идеально, но это было бы лучше, чем устанавливать его на каждый элемент, если он работает.

+0

Я не уверен, как вы установили бы его глобально, поскольку он не выглядит настраиваемым в xaml. Надеюсь, вы сможете сделать что-то вроде '' –

+0

Не уверен. Думал, что вы сможете сделать это через DataContext для родительского элемента. Но ваше индивидуальное решение для культуры выглядит более многообещающим. –

0

Проблема, как вы нашли, заключается в том, что WPF делает информацию о культуре и локализацию иным способом, чем другие части .NET.

Существует хорошее discussion of the problem here on SO.

WPFGlue blog имеет некоторые дополнительные детали