WPF Combobox Validation.ErrorTemplate错误

时间:2010-11-04 20:09:42

标签: wpf xaml

我有一个组合框,我需要编辑它的错误模板,以便在出现验证错误时显示红色边框。

我使用以下风格

<Style TargetType="{x:Type ComboBox}" >
    <Setter Property="Validation.ErrorTemplate">
        <Setter.Value>
            <ControlTemplate>
                <DockPanel>
                    <Border BorderBrush="Red" BorderThickness="3">
                        <AdornedElementPlaceholder />
                    </Border>
                </DockPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="FontFamily" Value="Segoe UI" />
    <Setter Property="FontSize" Value="12" />
    <Setter Property="VerticalAlignment" Value="Center" />
</Style>

发生验证错误时,边框永远不会显示。出了什么问题?

5 个答案:

答案 0 :(得分:4)

您发布的Style作品。您应该检查绑定,是否已将ValidatesOnDataErrors=TrueValidatesOnExceptions=True添加到SelectedValue的绑定中?

答案 1 :(得分:1)

在没有停靠面板的情况下输入codetry,这是无用的,因为它包装了一个元素。但是,我不知道如果用带边框包装文本框是有意义的,因为它已经有了边框!您应该尝试直接更改其边框的颜色。您可以尝试再次使用面板,但然后将边框放在面板周围,即:

Border BorderBrush =“Red”BorderThickness =“3”
DockPanel中
AdornedElement

这更有意义,因为包装面板没有自己的边框。

答案 2 :(得分:1)

使用此。

    <Style x:Key="textBoxStyle" TargetType="{x:Type telerik:RadMaskedTextBox}">
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="True">
                <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
                <Setter Property="Control.BorderBrush" Value="Red" />
            </Trigger>
        </Style.Triggers>
    </Style>

答案 3 :(得分:1)

我不喜欢这里的任何回复。简单地说,如何使用Blend更改ComboBox的错误模板的边框颜色?在ComboBox的现有边界周围绘制另一个边框是不可接受的。我已经弄清楚如何在Blend中创建ControlTemplate而不是验证模板。

我已经接近试图让它看起来像我改变了实际的边框颜色,但那不是我真正想要的。建议?为了使它复杂一点,我想在控件的右边框之外显示一个红色星号。

下面的代码是一个近距离尝试,但它实际上是在ComboBox中绘制一个边框,如果你仔细观察,你可以看到当与ComboBox边框结合时边框宽2像素:

<DockPanel Name="myDockPanel">
        <AdornedElementPlaceholder>
            <Border BorderBrush="Blue" BorderThickness="1" CornerRadius="2" />
        </AdornedElementPlaceholder>
        <TextBlock Text="*" FontWeight="Bold" FontSize="14" Foreground="Red" DockPanel.Dock="Left"  ToolTip="{Binding .CurrentItem}" />
    </DockPanel>

答案 4 :(得分:0)

我搜索了更多内容,并根据另一篇文章提出了一个解决方案:WPF - How to apply style to AdornedElementPlaceholder's AdornedElement?

<!-- This works -->
<ComboBox Name="comboBox1" Style="{StaticResource NewComboBoxStyle}" Validation.ErrorTemplate="{StaticResource comboBoxValidationTemplate}" />

<SolidColorBrush x:Key="MainBorderBrush">#FF91B3FF</SolidColorBrush>

<Style x:Key="NewComboBoxStyle" TargetType="{x:Type ComboBox}" BasedOn="{StaticResource myErrorTemplate}">
    <Setter Property="BorderBrush" Value="{DynamicResource MainBorderBrush}" />
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="True">
            <Setter Property="BorderBrush" Value="Blue" />
        </Trigger>
    </Style.Triggers>
</Style>

<!-- Sets ToolTip when Validation.HasError is True. -->
<Style TargetType="Control" x:Key="myErrorTemplate">
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="ToolTip"
                Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                Path=(Validation.Errors).CurrentItem.ErrorContent}"/>
        </Trigger>
    </Style.Triggers>
</Style>

<ControlTemplate x:Key="comboBoxValidationTemplate">
    <DockPanel Name="myDockPanel">
        <AdornedElementPlaceholder/>
        <TextBlock Text="*" FontWeight="Bold" FontSize="14" Foreground="Red" DockPanel.Dock="Left" ToolTip="{Binding .CurrentItem}" />
    </DockPanel>
</ControlTemplate>