Можно ли добавить больше символов после привязки в xaml?
Мне было интересно что-то, и я не мог найти соответствующие темы. У меня есть следующие привязки:
Content="{x:Static resx:Resource.Form_OtherOption_Description}"
Это поместит строку в метку. Я спрашивал себя, могу ли я добавить ":" после этой привязки, а не в код, только в xaml. Этикетка представляет собой нечто вроде "Имя:". Но добавление ":" как части привязки не является вариантом.
Edit
Я работаю в версии 3.5
Любые предложения.
Спасибо заранее.
Ответы
Ответ 1
Вы можете выполнить это с помощью чего-то вроде:
<TextBlock Text="{Binding Source={x:Static resx:Resource.Form_OtherOption_Description},
StringFormat={}{0}:}" />
Изменить: <Label>
Content
свойство не уважает свойство StringFormat
привязки, по-видимому. Который я нашел, был перенесен в свойство ContentStringFormat
на <Label>
.
<Label Content="{x:Static resx:Resource.Form_OtherOption_Description}"
ContentStringFormat="{}{0}:" />
Ответ 2
Если вы используете WPF 4.0, вы также можете сделать это:
<TextBlock>
<Run Text="{Binding SomeLabel}"/>
<Run Text=":"/>
</TextBlock>
Это фактически объединяет две строки, идущие от двух тегов Run
и скопированные в свойство TextBlock.Text
!.
Используя этот подход, вы можете даже привязать к другим свойствам в презентаторе и отобразить его в одном TexBlock
. Вот отличный пример:
Можем ли мы конкатцировать два свойства при связывании данных?
Ответ 3
Вы также можете использовать MultiBinding с StringFormat, например:
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="ID {0} Name: {1} Age: {2}">
<Binding Source="{x:Static resx:SomeResx.ID}"/>
<Binding Path="Name"/>
<Binding Path="Age"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Вы можете использовать это в элементе управления TextBlock TextBlock.Text(извините, я не смог получить код, чтобы отобразить это выше)
Ответ 4
Попробуйте свойство привязки StringFormat - он может делать очень просто, что вы хотите.
Ответ 5
Да, вы можете. Здесь я добавляю "тестирование" после привязки текста (clouds.all) в телефоне Windows.
<TextBlock Text="{Binding Path=clouds.all, StringFormat=\{0\}testing}"/>
Ответ 6
если вы используете метку внутри индикатора выполнения, вы можете использовать этот способ:
<Label x:Name="Progress" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontWeight="Bold" Foreground="White" Opacity=".7"
Content="{Binding Path=Value, RelativeSource={RelativeSource TemplatedParent}}" ContentStringFormat="{}{0}%">
таким образом вы можете визуализировать значение progressbar с добавленным%.
Ответ 7
Вы можете создать конвертер, который принимает входную строку и добавляет ":".
public class AddStringToStringConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string input = value as string;
string suffix = parameter as string;
return input + suffix;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
Xaml:
<Window.Resources>
<local:AddStringToStringConverter x:Key="AddStringToStringConverter"/>
</Window.Resources>
...
<Label Text="{Binding Source={x:Static resx:Resource.Form_OtherOption_Description}, Converter={StaticResource AddStringToStringConverter}, ConverterParameter=:}"/>
Или что-то в этом роде. Пробовал это, и это работало для моего источника как минимум.
Если у вас есть пробелы и т.п. в ConverterParameter
, вы можете использовать котировки с надписью, чтобы убедиться, что они не удаляются.
Изменить: О, хорошо... да... там также StringFormat
, который мне никогда не нужен раньше, ehehehe...