我使用以下代码为文本框实现了错误样式。如果元素通过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图像显示在表单上。
我尝试了一些基本的风格,比如交换和元素的顺序,但我尝试的任何东西似乎都没有用。
那么关于如何让图像显示的任何想法?
更新
斯蒂芬的回答击中了头部的钉子。增加边距确实可以显示图像的空间。但是我遇到了另一个单独的问题,即如果程序首次启动时出现错误条件,则工具提示将反映错误情况,但不会显示图像。仅在程序启动后积极提高错误条件时才会显示图像。我以前见过这个,但还没有看到正确的处理方法。是时候研究另一个WPF主题了!
答案 0 :(得分:2)
鉴于样式似乎首先被正确应用,这可能只是您特定窗口组合的影响,即相关控件的宽度,边距和位置:
根据您的布局,如果窗口内没有足够的空间来显示图像旁边的图像,则图像可能最终在后面单选按钮“画布”,因此不可见,例如如果RadioButton
填充StackPanel
行的整个宽度。
因此,您应该能够通过提供足够的空间来“透露”图像,例如:通过在您的情况下设置至少16的适当右边距:
<RadioButton Margin="0,0,16,0"/>
根据这些假设,我确实能够重现这个问题:大概很容易被忽略,因为TextBox
的宽度和/或边距通常是由于默认{TextBox
而明确提供的。 1}}边框,而RadioButton
不太常见,默认情况下其边框不可见。
答案 1 :(得分:0)
你可以创建一个自定义控件,它有标准的单选按钮以及右边的图像,然后你可以在错误状态下设置它吗?
或者你想过用图像替换raido按钮的填充吗?