2012-08-13 69 views
0

我有一个验证模板如下。但是我们可以在控件内部或控件的左侧设置错误图标。你能告诉我怎样才能使LED闪烁的控制权(文本框外,右)WPF IDataErrorInfo图标位置权

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

       > 

<Storyboard x:Key="FlashErrorIcon"> 
    <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" 
            Storyboard.TargetProperty="(UIElement.Visibility)"> 
     <DiscreteObjectKeyFrame KeyTime="00:00:00" Value="{x:Static Visibility.Hidden}"/> 
     <DiscreteObjectKeyFrame KeyTime="00:00:00.2000000" Value="{x:Static Visibility.Visible}"/> 
     <DiscreteObjectKeyFrame KeyTime="00:00:00.4000000" Value="{x:Static Visibility.Hidden}"/> 
     <DiscreteObjectKeyFrame KeyTime="00:00:00.6000000" Value="{x:Static Visibility.Visible}"/> 
     <DiscreteObjectKeyFrame KeyTime="00:00:00.8000000" Value="{x:Static Visibility.Hidden}"/> 
     <DiscreteObjectKeyFrame KeyTime="00:00:01" Value="{x:Static Visibility.Visible}"/> 
    </ObjectAnimationUsingKeyFrames> 
</Storyboard> 
<Style x:Key="myErrorTemplate" TargetType="Control"> 
    <Setter Property="Validation.ErrorTemplate"> 
     <Setter.Value> 
      <ControlTemplate> 
       <DockPanel LastChildFill="True"> 
        <Ellipse DockPanel.Dock="Left" 
          ToolTip="{Binding ElementName=myTextbox, 
           Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" 
          Width="15" Height="15" 
          Margin="-25,0,0,0" 
          StrokeThickness="1" Fill="Red" > 
         <Ellipse.Stroke> 
          <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5"> 
           <GradientStop Color="#FFFA0404" Offset="0"/> 
           <GradientStop Color="#FFC9C7C7" Offset="1"/> 
          </LinearGradientBrush> 
         </Ellipse.Stroke> 
         <Ellipse.Triggers> 
          <EventTrigger RoutedEvent="FrameworkElement.Loaded"> 
           <BeginStoryboard Storyboard="{StaticResource FlashErrorIcon}"/> 
          </EventTrigger> 
         </Ellipse.Triggers> 
        </Ellipse> 
        <TextBlock DockPanel.Dock="Left" 
          ToolTip="{Binding ElementName=myControl, 
           Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" 
          Foreground="White" 
          FontSize="11pt" 
          Margin="-15,5,0,0" FontWeight="Bold">! 
         <TextBlock.Triggers> 
          <EventTrigger RoutedEvent="FrameworkElement.Loaded"> 
           <BeginStoryboard Storyboard="{StaticResource FlashErrorIcon}"/> 
          </EventTrigger> 
         </TextBlock.Triggers> 
        </TextBlock> 
        <Border BorderBrush="Red" BorderThickness="1"> 
         <AdornedElementPlaceholder Name="myControl"/> 
        </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> 
<Style TargetType="TextBox" BasedOn="{StaticResource myErrorTemplate}" /> 

回答

0

更改通过修改模板中的错误图标的位置。

+0

嗨,我同意。我试图设置它的权利,但它显示在控制之内。 – user1386121 2012-08-13 11:36:49