Я пытаюсь создать DataTemplate programmarically 100% в codebehind. Все работает отлично, за исключением того, что StringFormat для текстового связывания в текстовых блоках не работает.WPF StringFormat in Binding не работает в коде позади
Обычно в XAML, я бы сделать это так:
<TextBlock Text={Binding MyProperty, StringFormat=0.0} />
поэтому я предположил, что я мог бы просто установить StringFormat свойство Binding объекта, который я сделал. Я проверил, что он настроен правильно, и это так, но мое мнение по-прежнему не отражает форматирование. Зачем?
Вот отрывок из моего кода: функция, которая динамически создает DataTemplate для меня. Буквально все остальное работает отлично, от установки пути привязки к конверторам ivalue и всему. Только не строковый формат.
string propertyName = "myPropertyName";
FrameworkElementFactory textBlock = new FrameworkElementFactory(typeof(TextBlock));
// the property I want is owned by myObject, which is a property of the datacontext
string bindingString = String.Format("myObject[{0}]", propertyName);
Binding binding = new Binding(bindingString)
{
Mode = BindingMode.OneWay,
Converter = (IValueConverter)Application.Current.FindResource("InvalidValuesConverter"),
StringFormat = "{0:F1}" // <-- Here is where I specify the stringFormat. I've also tried "0.0"
};
textBlock.SetBinding(TextBlock.TextProperty, binding);
[MCVE] (http://stackoverflow.com/help/mcve) - ваш лучший друг. Потому что на данный момент все кажется [вероятно правильным] (http://stackoverflow.com/questions/14769529/binding-string-format-from-code-behind), но без реальных типов и форматированных строк и огромной кучи от несвязанного кода трудно быть уверенным. –
Отредактировано для удаления ненужного кода – user3685285
Переплет в коде позади имеет конвертер, поэтому он игнорирует StringFormat. – Clemens