WPF Binding - StringFormat - не форматируется - PullRequest
18 голосов
/ 21 декабря 2010

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

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

Подсказка отображается как:

72

Но я ожидаюэто должно быть:

Зарезервировано (Доля в капитале: 72%)

Что не так с моим связыванием?

Ответы [ 7 ]

51 голосов
/ 12 мая 2011

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

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

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

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

16 голосов
/ 21 декабря 2010

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

<ToolTip>
    <TextBlock Text="{Binding Path=DataItem.EquitySold, StringFormat=Reserved (Equity Share: \{0\}%)}" />
</ToolTip>
3 голосов
/ 21 декабря 2010

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

Value="{Binding Path=DataItem.EquitySold, StringFormat='Reserved (Equity Share: {0}%)'}"
0 голосов
/ 23 июня 2016

Для всех, кто попадает сюда в несколько иную ситуацию, это было желательно для установки всплывающей подсказки 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>
0 голосов
/ 07 января 2016
<Button.ToolTip>
 <TextBlock Text="{Binding Path=ToggleText, StringFormat={}{0} Text}"/>
</Button.ToolTip>

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

0 голосов
/ 21 декабря 2010

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

0 голосов
/ 21 декабря 2010

Попробуйте

StringFormat=Reserved (Equity Share: {0:P0})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...