Windows Phone 8.1 XAML StringFormat
Я пытаюсь отобразить некоторый текст вместе со связанными данными, например, у меня есть код:
<TextBlock Text="{Binding Shorthand}" Style="{ThemeResource ListViewItemTextBlockStyle}" />
Я хочу добавить текст перед "Сокращением", из того, что я прочитал, было бы возможно, используя StringFormat как свойство связывания, что-то вроде строк:
<TextBlock Text="{Binding Path=Shorthand, StringFormat={0} text I want to add}" Style="{ThemeResource ListViewItemTextBlockStyle}" />
Однако, похоже, это не работает, разве это уже не способ делать вещи в 8.1?
Ответы
Ответ 1
StringFormat
не поддерживается в WinRT. Однако вы можете легко заменить его, создав собственный конвертер:
public class StringFormatConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return string.Format(parameter as string, value);
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return null;
}
}
Затем объявите его в своих ресурсах страниц:
<Page.Resources>
<local:StringFormatConverter x:Name="StringFormat"/>
</Page.Resources>
И используйте его в своих привязках:
<TextBlock Text="{Binding Path=SomeText, Converter={StaticResource ResourceKey=StringFormat}, ConverterParameter='Hello {0}'}" />
Ответ 2
Как @KooKiz указал, что StringFormat
на данный момент не поддерживается, но вы можете выполнить тот же эффект, просто вырвав ваши строки в встроенные Runs без конвертора, например;
<TextBlock>
<Run Text="Hey I wanted to put this text in front of "/>
<Run Text="{Binding Path=Shorthand}"/>
<Run Text=" and I also wanted some text after it. Neato.."/>
</TextBlock>
Надеюсь, это поможет, приветствует.
Ответ 3
Я использовал этот подход (написано Microsoft): https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.data.ivalueconverter
Он отлично работает!