【问题标题】:Radio Button Error Style单选按钮错误样式
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    根据这个假设,我确实能够重现该问题:大概它很容易被忽略,因为由于默认的TextBox 边框,TextBox 的宽度和/或边距通常是显式提供的并且无论哪种方式都是可见的,而这对于 RadioButton 来说不太常见,并且默认情况下它的边框是不可见的。

    【讨论】:

      猜你喜欢
      • 2012-01-21
      • 2014-10-24
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      相关资源
      最近更新 更多