我正在使用 MVVM 架构制作 WPF 应用程序。对于每个站点,数据库都会为前景保留一个背景颜色值,该值在从数据库映射时会创建与这些颜色相对应的 System.Windows.Media.Brush 的 2 个新实例。
然后 viewmodel 像这样包装选定的站点:
public Brush TextBrush
{
get
{
if (StudyCentre == null)
{
return _defaultText;
}
return StudyCentre.TextColour;
}
}
我还定义了验证错误的样式,我认为这可能与错误有关:
<Style x:Key="errorStyle" TargetType="TextBlock">
<Setter Property="FontStyle" Value="Italic" />
<Setter Property="Foreground" Value="Red" />
<Setter Property="HorizontalAlignment" Value="Right" />
<Setter Property="Margin" Value="0,1" />
</Style>
<DataTemplate DataType="{x:Type ValidationError}">
<TextBlock Style="{StaticResource errorStyle}" Text="{Binding Path=ErrorContent}" />
</DataTemplate>
并像这样设置前景色:
<Style TargetType="TextBlock" >
<Setter Property="Foreground" Value="{Binding Path=TextBrush, Mode=OneWay}" />
</Style>
但是,输出充满了以下错误(即认为每个验证内容控件都有一个
System.Windows.Data Error: 40 : BindingExpression path error: 'TextBrush' property not found on 'object' ''ValidationError' (HashCode=26199139)'. BindingExpression:Path=TextBrush; DataItem='ValidationError' (HashCode=26199139); target element is 'TextBlock' (Name=''); target property is 'Foreground' (type 'Brush')
页面显示正常(我不希望前景色应用于错误内容控件中的文本块),但我想避免这种绑定错误。
有没有办法排除错误内容控件,同时仍然适用于文本框而不诉诸命名样式?谢谢。