我正在尝试实现此answer中描述的内容。我想有一个用于验证警告的模板和一个用于错误的模板。我以为我通过在这样的样式触发器中绑定到Validation.ErrorTemplate
来弄明白:
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="Validation.ErrorTemplate" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Converter={StaticResource ValidationTemplateConverter}, Path=(Validation.Errors)[0].ErrorContent}" ></Setter>
</Trigger>
</Style.Triggers>
</Style>
转换器只需从ErrorContent中获取一个键,然后在ResourceDictionary
中查找正确的模板。不幸的是,这不起作用,因为不允许绑定到Validation.ErrorTemplate
- ArgumentException
'ErrorTemplate' property cannot be data-bound.
Parameter name: dp
还有其他人试图实现这样的东西吗?
答案 0 :(得分:1)
你不能把这个逻辑移到DataTemplateSelector
吗?我假设您将Validation.Errors
绑定到某种ItemsControl
- ItemsControl
可以DataTemplateSelector
显示错误内容,具体取决于它是否为警告或错误。
如果您只是显示第一个错误,那么您可以随时将模板包含ContentControl
,数据绑定Content
至Validation.Errors[0]
并应用ContentTemplateSelector
<Style TargetType="TextBox">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel>
<ItemsControl ItemsSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Validation.Errors)"
ItemTemplateSelector="{StaticResource ErrorTemplateSelector}" />
<AdornedElementPlaceholder/>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>