Я думаю, вам придется использовать конвертер для этого. Попробуйте что-то вроде этого
<Style x:Key="LabelStandard" TargetType="Label">
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="VerticalAlignment" Value="Top"/>
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource self},
Path=Content,
Converter={StaticResource LastCharConverter},
ConverterParameter=*}"
Value="True">
<Setter Property="Foreground" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
public class LastCharConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
{
return false;
}
string content = value.ToString();
if (content.Length > 0 &&
content[content.Length - 1] == (char)parameter)
{
return true;
}
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Обновление
Вы можете привязать любой заданный символ в строке Content
, если вы знаете его положение.
<Style x:Key="LabelStandard" TargetType="Label">
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="VerticalAlignment" Value="Top"/>
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource self},
Path=(Content)[2]}"
Value="*">
<Setter Property="Foreground" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
Но если длина вашей строки будет меняться (что, как я полагаю, имеет место), это не принесет вам большой пользы, поскольку вы не можете связать [2]
внутри привязки (любым способом, о котором я знаю) .
Кроме этого, я думаю, вам придется создать решение, основанное на коде, как вы сами указали