Формат строки WPF Формат не работает [дубликат]

Нет необходимости использовать метод date () из PHP, если вы не используете временную метку. Если dateposted - столбец datetime, вы можете вставить текущую дату следующим образом:

$db->query("INSERT INTO table (dateposted) VALUES (now())");
54
задан twip 24 June 2013 в 17:07
поделиться

5 ответов

Причина, по которой это не работает, заключается в том, что свойство Label.Content имеет тип Object, а Binding.StringFormat используется только при привязке к свойству типа String.

Что происходит:

  1. Binding боксирует ваше значение MaxLevelOfInvestment и сохраняет его свойство Label.Content как десятичное значение в коробке.
  2. Элемент управления Label имеет шаблон, который включает в себя ContentPresenter.
  3. Поскольку ContentTemplate не установлен, ContentPresenter ищет DataTemplate, определенный для типа Decimal. Когда он не находит ничего, он использует шаблон по умолчанию.
  4. Шаблон по умолчанию, используемый ContentPresenter, представляет строки с использованием свойства метки ContentStringFormat.

Two Решения возможны:

  • Использовать Label.ContentStringFormat вместо Binding.StringFormat или
  • Использовать свойство String, например TextBlock.Text, вместо Label.Content

Вот как использовать Label.ContentStringFormat:

<Label Content="{Binding Path=MaxLevelofInvestment}" ContentStringFormat="Amount is {0}" />

Вот как использовать TextBlock:

<TextBlock Text="{Binding Path=MaxLevelofInvestment, StringFormat='Amount is {0}'}" />

Примечание: для простоты я пропустил одна деталь в приведенном выше объяснении: ContentPresenter фактически использует свои собственные свойства Template и StringFormat, но во время загрузки они автоматически привязываются к шаблону ContentTemplate и ContentStringFormat свойствам Label, поэтому кажется, что ContentPresenter фактически использует свойства Label.

151
ответ дан Nikhil Agrawal 18 August 2018 в 21:00
поделиться
  • 1
    спасибо за подробное объяснение, теперь это имеет смысл. до команды WPF, чтобы сделать это опрятным в будущем. – Everything Matters 18 November 2010 в 11:50
  • 2
    Мне нравится ваш ответ, знаете ли вы, как использовать 2 параметра вместо 1? На самом деле борется здесь (например, TextBlock stringFormat может обрабатывать несколько при использовании триггеров и т. Д.). – EricG 23 October 2017 в 11:41

Попробуйте использовать конвертер ....

<myconverters:MyConverter x:Key="MyConverter"/>


<Label Content="{Binding Path=MaxLevelofInvestment, Converter={StaticResource MyConverter"} />


public class MyConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return String.Format("Amount is {0}", value);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value;
    }
}
1
ответ дан Gabe 18 August 2018 в 21:00
поделиться
  • 1
    Это необязательно и скрывает формат кода. – SLaks 17 November 2010 в 17:28
  • 2
    Может быть, так, но это решит проблему. – Gabe 17 November 2010 в 17:35
  • 3
    Это излишество. Я объясняю причину проблемы и представляю два простых решения в своем ответе. – Ray Burns 17 November 2010 в 22:56
  • 4
    Я согласен, что это скрывает использование, я недавно унаследовал проект, в котором был применен этот подход, и предпочел бы разработчикам использовать сборку в StringFormat, а не сворачивать свои собственные. – Fermin 25 January 2012 в 11:27
  • 5
    вы можете использовать формат в качестве параметра ... – Tomer W 12 July 2012 в 09:57

Я только что проверил, и по какой-то причине он не работает с ярлыком, вероятно, потому, что он использует ContentPresenter для свойства Content внутри. Вместо этого вы можете использовать TextBlock, и это сработает. Вы также можете поместить выдержку TextBlock ниже в содержание метки, если вам нужно наследовать стиль, поведение и т. Д.

<TextBlock Text="{Binding Path=MaxLevelofInvestment, StringFormat='Amount is \{0\}'} />
3
ответ дан Guy 18 August 2018 в 21:00
поделиться

Сделайте универсальный StringFormatConverter : IValueConverter. Передайте свою строку формата как ConverterParameter.

Label Content="{Binding Amount, Converter={...myConverter}, ConverterParameter='Amount is {0}'"

Также сделайте StringFormatMultiConverter : IMultiValueConverter, когда вам нужно больше одного объекта в строке формата, например Completed {0} tasks out of {1}.

2
ответ дан Mogsdad 18 August 2018 в 21:00
поделиться
  • 1
    Мне это нравится. Я вижу значение использования как чистого подхода XAML, так и преобразователя значений. – IAbstract 2 September 2016 в 13:19

Возможно, это поможет ...

Код встроенного кода в XAML

0
ответ дан strattonn 18 August 2018 в 21:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: