2009-02-09 3 views
1

я узнал, как форматировать строки в атрибуте содержимого метки, как это:Как форматировать строку в значение XAML Setter?

<Label Content="{Binding ElementName=theSlider, Path=Value}" 
    ContentStringFormat="The font size is {0}."/> 

Я хочу сделать то же самое в сеттер, но «ValueStringFormat» не существует, что такое правильный синтаксис делать то, что я хочу сделать здесь:

<DataTrigger Binding="{Binding Path=Kind}" Value="Task"> 
    <Setter TargetName="TheTitle" Property="Text" 
     Value="{Binding Title}" 
     ValueStringFormat="Your title was: {0}"/> 
</DataTrigger> 

ответ

4

Можете ли вы просто использовать свойство StringFormat самого Binding?

<DataTrigger Binding="{Binding Path=Kind}" Value="Task"> 
    <Setter TargetName="TheTitle" Property="Text" 
     Value="{Binding Title,StringFormat='Your title was: {}{0}'}" 
     /> 
</DataTrigger> 
+1

+1, но не должно {0} сбежать с двумя фигурными фигурными скобками - {}? – arconaut

+0

Действительно! Я исправлю это сейчас. –

+0

Исходное изменение было неправильным. {} Находится в неправильном месте. Он не работает, если он не находится в начале строки, а не непосредственно перед {0} – claudekennilol

1

я не могу проверить это, но надеюсь, что это работает:

... 
xmlns:local="clr-namespace:ValueConverter" 
... 

<Window.Resources> 
    <local:MyTextConverter x:Key="MyTextConverter" /> 
</Window.Resources> 

... 
<DataTrigger Value="Task"> 
    <DataTrigger.Binding> 
     <Binding Converter="{StaticResource MyTextConverter}" 
      Path="Kind" /> 
    </DataTrigger.Binding> 
    <Setter TargetName="TheTitle" Property="Text"/> 
</DataTrigger> 

где MyTextConverter класс реализация интерфейса IValueConverter:

public class PositionConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, 
     CultureInfo culture) 
    { 
     return String.Format("Your title was: {0}", value); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, 
     CultureInfo culture) 
    { 
     throw new Exception("The method or operation is not implemented."); 
    } 
+1

Это работает, но вы убираете способность дизайнера задавать строку формата. – Will