2010-11-04 66 views
4

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

我使用下面的风格

<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> 

时发生的验证错误的边界一直没有出现。任何提示有什么问题?

回答

1

输入代码heretry没有停靠面板,这是没有用的,因为它包裹了一个元素。但是,我真的不明白,如果将文本框换成边框是有意义的,因为它已经有一个边框了!您应该尝试直接更改其边框的颜色。您可以尝试再次使用的面板,但然后把周围的边框面板,即:

边境BorderBrush = “红” 了borderThickness = “3”
      DockPanel中
          AdornedElement

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

4

您发布的作品为Style。你应该检查你的绑定,你添加ValidatesOnDataErrors=TrueValidatesOnExceptions=True绑定的SelectedValue

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> 
1

我不喜欢这里的任何回应。简而言之,你如何使用Blend或不是改变ComboBox的错误模板的边框颜色?在ComboBox的现有边框周围绘制另一个边框应该是不可接受的。我已经想出了如何在Blend中创建ControlTemplate,但不是验证模板。

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

下面的代码是一个紧密的尝试,但它实际上是绘制组合框内部的边界,如果你看近,你可以看到边框的宽度为2个像素时具有ComboBox边框结合:

<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> 
+0

有意思的是,不如Blend是在让我们直观地编辑模板,似乎很难或许不可能在Blend中编辑'ErrorTemplate'。 – 2013-04-04 12:45:56

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>