【发布时间】:2010-11-20 01:13:28
【问题描述】:
我使用以下代码为文本框实现了错误样式。如果元素通过 IDataErrorInfo 接口报告错误状态,这将设置一个工具提示并在文本框的右侧放置一个漂亮的错误图像:
<!-- Set error style for textboxes -->
<Style x:Key="txtBoxErrStyle" TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(Validation.Errors)[0].ErrorContent}" />
</Trigger>
</Style.Triggers>
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel DockPanel.Dock="Right">
<AdornedElementPlaceholder />
<Image Source="Icons/Error.png"
Height="16"
Width="16"
ToolTip="{Binding Path=AdornedElement.ToolTip, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Adorner}}}" />
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
通过添加工具提示文本并将 Error.png 图像设置到文本框的右侧,这对我来说非常有效。但我想做的是为单选按钮提供类似的功能。我试图通过复制上面的代码并将标签更改为:
<!-- Set error style for radio buttons -->
<Style x:Key="radioBtnErrStyle" TargetType="{x:Type RadioButton}">
单选按钮绑定的字段通过IDataErrorInfo接口报错,单选按钮本身的ValidatesOnDataErrors设置为true。
这种某种对我有用。当单选按钮被认为有错误时,工具提示被设置为从 IDataErrorInfo 例程返回的错误消息。但我似乎无法让 Error.png 图像显示在表单上。
我已经尝试了一些基本的风格,例如交换和元素的顺序,但我尝试的任何尝试似乎都不起作用。
那么关于如何让图像显示的任何想法?
更新
Steffen 的回答一针见血。增加边距确实为显示图像留出了空间。
但是我遇到了另一个单独的问题,如果程序首次启动时出现错误情况,那么工具提示将反映错误情况,但不会显示图像。只有在程序启动后主动引发错误条件时,才会显示图像。我以前见过这个,但还没有看到处理它的正确方法。是时候研究另一个 WPF 主题了!
【问题讨论】:
-
关于您的更新并且没有深入研究 Validation.ErrorTemplate 的机制:显然触发器会触发,而已经绑定的模板不会 - 也许您可以稍后尝试通过触发器绑定模板属性来规避问题? Validation.ErrorTemplate 似乎需要在这里和那里进行特殊处理,有关相关问题,请参阅stackoverflow.com/questions/1194181/…。
标签: wpf button radio-button styles