Подтвердить что ты не робот

Можно ли добавить больше символов после привязки в xaml?

Мне было интересно что-то, и я не мог найти соответствующие темы. У меня есть следующие привязки:

Content="{x:Static resx:Resource.Form_OtherOption_Description}"

Это поместит строку в метку. Я спрашивал себя, могу ли я добавить ":" после этой привязки, а не в код, только в xaml. Этикетка представляет собой нечто вроде "Имя:". Но добавление ":" как части привязки не является вариантом.

Edit

Я работаю в версии 3.5

Любые предложения.

Спасибо заранее.

4b9b3361

Ответ 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...