单选按钮错误样式

时间:2009-08-16 15:32:22

标签: wpf button radio-button styles

我使用以下代码为文本框实现了错误样式。如果元素通过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主题了!

2 个答案:

答案 0 :(得分:2)

鉴于样式似乎首先被正确应用,这可能只是您特定窗口组合的影响,即相关控件的宽度,边距和位置:

根据您的布局,如果窗口内没有足够的空间来显示图像旁边的图像,则图像可能最终后面单选按钮“画布”,因此不可见,例如如果RadioButton填充StackPanel行的整个宽度。

因此,您应该能够通过提供足够的空间来“透露”图像,例如:通过在您的情况下设置至少16的适当右边距:

<RadioButton Margin="0,0,16,0"/>

根据这些假设,我确实能够重现这个问题:大概很容易被忽略,因为TextBox的宽度和/或边距通常是由于默认{TextBox而明确提供的。 1}}边框,而RadioButton不太常见,默认情况下其边框不可见。

答案 1 :(得分:0)

你可以创建一个自定义控件,它有标准的单选按钮以及右边的图像,然后你可以在错误状态下设置它吗?

或者你想过用图像替换raido按钮的填充吗?