Связывание WPF - StringFormat - не форматирование

У меня есть всплывающая подсказка со значением, заданным как:

Value="{Binding Path=DataItem.EquitySold, StringFormat=Reserved (Equity Share: \{0\}%)}"

Инструмент отображается как:

72

Но я ожидаю, что это будет:

Зарезервировано (доля: 72%)

Что не так с моей привязкой?

Ответ 1

Вы пробовали:

<ToolTip>
    <TextBlock Text="{Binding Path=DataItem.EquitySold, StringFormat=Reserved (Equity Share: \{0\}%)}" />
</ToolTip>

Ответ 2

ToolTip - это элемент управления контентом, что означает, что на нем нет модели отображения. Это продемонстрировано в более раннем ответе @deccyclone, который устанавливает контент в TextBlock. Поскольку TextBox предназначен для отображения текста, свойство привязки StringFormat работает так, как объявлено. Кнопка является еще одним примером этого. (Оба получаются из ContentControl)

Если вы устанавливаете содержимое ToolTip в строку, строка отображается, потому что в ToolTip встроен преобразователь, если тип данных - строка. Если вы хотите воспользоваться встроенным конвертером строк, вам необходимо установить формат с помощью свойства ContentStringFormat.

<ToolTip
     Content="{Binding Path=Value}"
     ContentStringFormat="{}{0:F2} M"
/>

BTW, подсказка о том, когда использовать StringFormat или ContentStringFormat, - это свойство, которое элемент управления предоставляет для установки отображаемого текста. Текстовое свойство → использовать StringFormat Свойство Content → use ContentStringFormat

Ответ 3

Вам не нужно выходить из скобок. Попробуйте это (я хотел бы поместить формат в одинарные кавычки):

Value="{Binding Path=DataItem.EquitySold, StringFormat='Reserved (Equity Share: {0}%)'}"

Ответ 4

Я предполагаю, что это то, что поддерживает ваш тип данных - насколько я знаю, он передается в качестве аргументов для IFormattable.

Ответ 5

<Button.ToolTip>
 <TextBlock Text="{Binding Path=ToggleText, StringFormat={}{0} Text}"/>
</Button.ToolTip>

Кнопка внутри DataGridTemplateColumn

Ответ 6

Для кого-то еще, что здесь заканчивается в несколько иной ситуации, это было желательно для установки всплывающей подсказки StringFormat через Style:

<DataGridTextColumn Header="Amount" CanUserSort="True"
                                    Binding="{Binding Amount,Mode=OneWay}">
    <DataGridTextColumn.CellStyle>
        <Style TargetType="DataGridCell">
            <Setter Property="ToolTip">
                <Setter.Value>
                    <TextBlock Text="{Binding JournalEntryId, StringFormat='Reserved (Equity Share: \{0\}%)'}" />
                </Setter.Value>
            </Setter>
        </Style>
    </DataGridTextColumn.CellStyle>
</DataGridTextColumn>

Ответ 7

Try

StringFormat=Reserved (Equity Share: {0:P0})