代码之家  ›  专栏  ›  技术社区  ›  Peter M

单选按钮错误样式

  •  1
  • Peter M  · 技术社区  · 17 年前

    我已经使用以下代码实现了文本框的错误样式。这将设置一个工具提示,如果元素通过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 回复  |  直到 10 年前
        1
  •  2
  •   Steffen Opel Norm Johanson    17 年前

    考虑到样式最初似乎应用正确,这可能只是特定窗口组合的影响,即相关控件的宽度、边距和位置:

    根据您的布局,图像可能会结束 后面 如果窗口中没有足够的空间显示控件旁边的图像,例如如果 RadioButton 填充的整个宽度 StackPanel 行。

    因此,您应该能够通过提供您认为合适的足够空间来“显示”图像,例如,在您的案例中设置至少16个适当的右边距:

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

    根据这个假设,我确实能够重现这个问题:大概它很容易被忽略,因为 TextBox 由于默认设置,通常以任何一种方式提供显式和可见的 文本框 边界,而这对于 单选按钮 默认情况下,它的边框是不可见的。

        2
  •  0
  •   Sebastian Gray    17 年前

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

    或者,您是否考虑用图像替换RAIDO按钮的填充?

    推荐文章