WPF IDataErrorInfo图标位置右侧

时间:2012-08-13 11:12:40

标签: wpf idataerrorinfo

我有一个验证模板,如下所示。但我们可以在控件内部或控件左侧设置错误图标。你能告诉我怎样才能让它在控件右边闪烁(在textBox右边和右边)

<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}" />

1 个答案:

答案 0 :(得分:0)

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