自定义验证

自定义验证

问题描述:

所以我想沿着这个例子做一些事情:http://www.codeproject.com/KB/WPF/wpfvalidation.aspx自定义验证

我的文本框目前看起来是这样的:

<TextBox Height="23" HorizontalAlignment="Left" Margin="118,60,0,0" Name="CreateUserCPRTextbox" VerticalAlignment="Top" Width="120" > 
       <TextBox.Text> 

        <Binding Path="Name" UpdateSourceTrigger="LostFocus"> 
         <Binding.ValidationRules> 
          <validators:TextRangeValidator 
         MinimumLength="10" 
         MaximumLength="10" 
         ErrorMessage="ID has to be 10 letters" /> 
         </Binding.ValidationRules> 
        </Binding> 
       </TextBox.Text> 

      </TextBox> 

我直接复制我的TextRangeValidator从示例在该网站上。当我失去对文本框的关注时,什么也没有发生。不管我输入什么。有任何想法吗? :)

您已设置的Validation.ErrorTemplate?它是在example.You的Application.Resources定义如下可能已经错过了

<Application.Resources> 

     <Style TargetType="{x:Type TextBox}"> 
      <Setter Property="Validation.ErrorTemplate"> 
       <Setter.Value> 
        <ControlTemplate> 
         <DockPanel LastChildFill="True"> 

          <TextBlock DockPanel.Dock="Right" 
           Foreground="Orange" 
           Margin="5" 
           FontSize="12pt" 
           Text="{Binding ElementName=MyAdorner, 
          Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"> 
          </TextBlock> 

          <Border BorderBrush="Green" BorderThickness="3"> 
           <AdornedElementPlaceholder Name="MyAdorner" /> 
          </Border> 

         </DockPanel> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
      <Style.Triggers> 
       <Trigger Property="Validation.HasError" Value="true"> 
        <Setter Property="ToolTip" 
         Value="{Binding RelativeSource={RelativeSource Self}, 
        Path=(Validation.Errors)[0].ErrorContent}"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 

    </Application.Resources> 

编辑

您的默认值不会触发验证routine.To迫使它来验证默认珍惜你必须设置

<validators:TextRangeValidator ValidatesOnTargetUpdated="True" 
         MinimumLength="10" 
         MaximumLength="10" 
         ErrorMessage="ID has to be 10 letters" /> 
+0

我没有这样做,因为我认为它会使用默认值。它在哪里使文本框的边框变红?我不确定在哪里适合这个代码 - 这就是为什么我没有使用它嘿......我是全新的WPF。 – 2011-05-20 12:10:39

+0

实际上应该会出现默认的红色边框。但它不会显示您的错误消息 – biju 2011-05-20 12:14:07

+0

应该去的地方?我把它放在里面? – 2011-05-20 12:20:28

我认为你需要设置ValidatesOnDataErrors=True在文本结合,使其工作

+0

似乎没有文本框获得该属性?或者你会在哪里添加它? – 2011-05-20 12:04:13

+0

说得更清楚我认为 – 2011-05-20 12:09:47

+0

这没有奏效。任何其他想法? :) – 2011-05-20 12:20:52

WPF的TextBox验证

<Style x:Key="TextBoxInError" TargetType="TextBox"> 
     <Setter Property="Validation.ErrorTemplate"> 
      <Setter.Value> 
       <ControlTemplate> 
        <DockPanel>       

         <Grid> 
          <Polygon Points="20,10,20,0 0,0" 
          Stroke="Black" 
          StrokeThickness="1" 
          Fill="Red" 
          HorizontalAlignment="Right" 
          VerticalAlignment="Top" 
          ToolTip="{Binding ElementName=adorner, 
           Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"/> 
          <AdornedElementPlaceholder x:Name="adorner"/> 


         <AdornedElementPlaceholder Name="customAdorner" VerticalAlignment="Center" > 
          <Border BorderBrush="red" BorderThickness="1" /> 
         </AdornedElementPlaceholder> 


         </Grid> 

         <Border Background="Red" DockPanel.Dock="right" Margin="5,0,0,0" 
          Width="150" Height="20" CornerRadius="5" 
          ToolTip="{Binding ElementName=customAdorner, 
             Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"> 
          <TextBlock Text= "{Binding ElementName=customAdorner, 
             Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" VerticalAlignment="center" HorizontalAlignment="Left" 
           FontWeight="Bold" Foreground="white" Width="250" />        


         </Border> 


        </DockPanel> 



       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     <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>   


    </Style> 
+0

你需要说明你已经做了什么来给出一些关于这是一个答案的指导,而不仅仅是邮政编码 – 2013-03-19 10:21:39