2016-12-08 5 views
0

я борюсь со странным вопросом о ToolTip с в WPF:ToolTip игнорирует заданный формат DateTime спецификатор

Сначала код:

<TextBlock Text="{Binding SelectedItem.Approver.Timestamp, StringFormat='{}{0:g}'}" 
      ToolTip="{Binding SelectedItem.Approver.Timestamp, StringFormat='{}{0:f}'}" /> 

Как вы можете видеть, "g format specifier" (например, 2016-12-24 23:42) используется для отображения метки времени и «f format specifier» (например, Saturday, 24. December 2016 23:42) для его ToolTip.

Однако, я получаю: 2016-12-24 23:42. Другими словами: ToolTip показывает точно такой же формат, как и TextBlock.

Он становится еще более странным при переключении TextBlock в «спецификатор формата f»: ToolTip просто остается в формате, указанном спецификатором «g format».

Итак, у меня есть два вопроса:
a) Почему?
и
b) Как обеспечить соблюдение моего желаемого формата?

+0

Я не знаком с WPF, но у меня есть несколько вопросов: ** 1) ** Так как это стандартные форматы, это не 'StringFormat = g' и' StringFormat = g' достаточно? ** 2) ** Невозможно использовать пользовательские форматы даты и времени, например 'StringFormat = yyyy-MM-dd HH: mm' и' StringFormat = dddd, dd. MMMM yyyy HH: mm'? ** 3) ** Использование культуры для форматирования не является 'sq-AL', не так ли? Поскольку спецификаторы формата 'g' и' f' генерируют один и тот же результат, поскольку эта культура имеет значение _same_ для свойств LongDatePattern и ShortDatePattern. –

+0

Что касается ваших вопросов: ** 1) **: Нет, как вы можете видеть [здесь] (https://msdn.microsoft.com/en-us/library/system.windows.data.bindingbase.stringformat.aspx) , ** 2) **: Я не хочу настраивать жесткий код на то, что уже встроено в .NET. ** 3) **: Нет, это не так. Есть, однако, несколько других «используемых культуры», например. г. 'Де-DE'. Но самое главное: 'f' и' g' приводят к ** различным ** выходам. – Yoda

ответ

1

Я получил это работает.

<TextBlock Text="{Binding SelectedItem.Approver.Timestamp, StringFormat={}{0:g}}"> 
    <TextBlock.ToolTip> 
    <ToolTip Content="{Binding SelectedItem.Approver.Timestamp}" ContentStringFormat="{}{0:f}" /> 
    </TextBlock.ToolTip> 
</TextBlock> 

В подсказке может содержать что-либо, мы должны использовать его ContentStringFormat.

+0

Спасибо за ваше второе предложение. Указав его подробно с помощью 'ContentStringFormat', действительно изменит отображаемый формат, но он не отвечает на вопрос, почему он сокращает формат. – Yoda

+1

Поскольку Tooltip может содержать что угодно, любой объект, внутренне он имеет простой преобразователь ToString и игнорирует StringFormat, определенный в DataBinding. Вот почему Tooltip имеет ContentStringFormat – quicoli

+0

Спасибо за понимание. Это почти все, что я искал. Последнее: нет шансов сохранить однострочный , например, используйте 'ContentStringFormat' в атрибуте' ToolTip' вместо встроенного определения (пожалуйста, исправьте меня, если это неправильная форма технического термина для ... '!)? – Yoda

0

Я считаю, что синтаксис неправильный.

См:

<TextBlock Text="{Binding SelectedItem.Approver.Timestamp, StringFormat={}{0:g}}" 
      ToolTip="{Binding SelectedItem.Approver.Timestamp, StringFormat={}{0:f}}" /> 
+0

Нет, это не так, как это необходимо для инкапсуляции таких параметров в одинарные кавычки. Однако, пытаясь попробовать предложения, я попробовал это без одиночных кавычек. К сожалению, результат остается тем же. :( – Yoda