当表单上字段的要求发生变化时,不是以编程方式设置样式,而是可以使用一个触发器来检查Label.Contents中的最后一个字符是一个'*',如果这样设置了一个属性,标签
这样的东西但是如何检查Content属性的最后一个字符?
<Style x:Key="LabelStandard" TargetType="Label">
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="VerticalAlignment" Value="Top"/>
<Style.Triggers>
<Trigger Property="Content" Value="*"> <!-TODO only check the last char -->
<Setter Property="Foreground" Value="Red"/>
</Trigger>
</Style.Triggers>
</Style>
答案 0 :(得分:3)
我认为你必须使用转换器。尝试使用类似的东西
<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]
(以我知道的任何方式)的)。
除此之外,我认为你必须在你自己指出的时候做一个代码隐藏的代码