0

我的 WPF 应用程序中有一些错误检查。错误消息显示在文本框旁边,但当文本框位于应用程序右侧时,它不会显示所有错误文本。

结果:

错误信息

这是我的错误模板样式:

<ControlTemplate x:Key="errorTemplateStyle">
    <StackPanel Orientation="Horizontal">
        <Border BorderThickness="1" BorderBrush="#FFdc000c" CornerRadius="0.7"
            VerticalAlignment="Top">
            <Grid>
                <Polygon x:Name="toolTipCorner"
                     Grid.ZIndex="2"
                     Margin="-1"
                     Points="6,6 6,0 0,0" 
                     Fill="#FFdc000c" 
                     HorizontalAlignment="Right" 
                     VerticalAlignment="Top"
                     IsHitTestVisible="True"/>
                <Polyline Grid.ZIndex="3"
                      Points="7,7 0,0" Margin="-1" HorizontalAlignment="Right" 
                      StrokeThickness="1.5"
                      StrokeEndLineCap="Round"
                      StrokeStartLineCap="Round"
                      Stroke="White"
                      VerticalAlignment="Top"
                      IsHitTestVisible="True"/>
                <AdornedElementPlaceholder x:Name="adorner"/>
            </Grid>
        </Border>
        <Border x:Name="errorBorder" Background="#FFdc000c" Margin="1,0,0,0"
            Opacity="0" CornerRadius="1.5"
            IsHitTestVisible="False"
            MinHeight="24" MaxWidth="267">
            <Border.Effect>
                <DropShadowEffect ShadowDepth="2.25" 
                              Color="Black" 
                              Opacity="0.4"
                              Direction="315"
                              BlurRadius="4"/>
            </Border.Effect>
            <TextBlock Text="{Binding ElementName=adorner,
                                  Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"
                   Foreground="White" Margin="8,3,8,3" TextWrapping="Wrap"/>
        </Border>
    </StackPanel>
    <ControlTemplate.Triggers>
        <DataTrigger Value="True">
            <DataTrigger.Binding>
                <MultiBinding Converter="{StaticResource BooleanOrConverter}">
                    <Binding ElementName="adorner" Path="AdornedElement.IsKeyboardFocused" />
                    <Binding ElementName="toolTipCorner" Path="IsMouseOver"/>
                </MultiBinding>
            </DataTrigger.Binding>
            <DataTrigger.EnterActions>
                <BeginStoryboard x:Name="fadeInStoryboard">
                    <Storyboard>
                        <DoubleAnimation Duration="00:00:00.15"
                                     Storyboard.TargetName="errorBorder"
                                     Storyboard.TargetProperty="Opacity"
                                     To="1"/>
                        <ThicknessAnimation Duration="00:00:00.15"
                                        Storyboard.TargetName="errorBorder"
                                        Storyboard.TargetProperty="Margin"
                                        FillBehavior="HoldEnd"
                                        From="1,0,0,0"
                                        To="5,0,0,0">
                            <ThicknessAnimation.EasingFunction>
                                <BackEase EasingMode="EaseOut" Amplitude="2"/>
                            </ThicknessAnimation.EasingFunction>
                        </ThicknessAnimation>
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
            <DataTrigger.ExitActions>
                <StopStoryboard BeginStoryboardName="fadeInStoryboard"/>
                <BeginStoryboard x:Name="fadeOutStoryBoard">
                    <Storyboard>
                        <DoubleAnimation Duration="00:00:00"
                                     Storyboard.TargetName="errorBorder"
                                     Storyboard.TargetProperty="Opacity"
                                     To="0"/>
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.ExitActions>
        </DataTrigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

你能帮我如何显示所有错误信息吗?

谢谢雅库布

4

1 回答 1

0

解决方案是对 errorBorder 使用弹出窗口。

工作作风是:

<ControlTemplate x:Key="errorTemplateStyle">
    <StackPanel Orientation="Horizontal">
        <Border BorderThickness="1" BorderBrush="#FFdc000c" CornerRadius="0.7"
            VerticalAlignment="Top">
            <Grid>
                <Polygon x:Name="toolTipCorner"
                     Grid.ZIndex="2"
                     Margin="-1"
                     Points="6,6 6,0 0,0" 
                     Fill="#FFdc000c" 
                     HorizontalAlignment="Right" 
                     VerticalAlignment="Top"
                     IsHitTestVisible="True"/>
                <Polyline Grid.ZIndex="3"
                      Points="7,7 0,0" Margin="-1" HorizontalAlignment="Right" 
                      StrokeThickness="1.5"
                      StrokeEndLineCap="Round"
                      StrokeStartLineCap="Round"
                      Stroke="White"
                      VerticalAlignment="Top"
                      IsHitTestVisible="True"/>
                <AdornedElementPlaceholder x:Name="adorner"/>
            </Grid>
        </Border>
        <Popup x:Name="errorBorder" MinHeight="24" MinWidth="24" MaxWidth="267" Placement="Right" Margin="1,0,0,0" >
            <Border Background="#FFdc000c"
            Opacity="1" CornerRadius="1.5"
            IsHitTestVisible="False"
            MinHeight="24" MaxWidth="267">
                <Border.Effect>
                    <DropShadowEffect ShadowDepth="2.25" 
                              Color="Black" 
                              Opacity="0.4"
                              Direction="315"
                              BlurRadius="4"/>
                </Border.Effect>
                <TextBlock Text="{Binding ElementName=adorner,
                                  Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"
                   Foreground="White" Margin="8,3,8,3" TextWrapping="Wrap"/>
            </Border>
        </Popup>
    </StackPanel>
    <ControlTemplate.Triggers>
        <DataTrigger Value="True">
            <DataTrigger.Binding>
                <MultiBinding Converter="{StaticResource BooleanOrConverter}">
                    <Binding ElementName="adorner" Path="AdornedElement.IsKeyboardFocused" />
                    <Binding ElementName="toolTipCorner" Path="IsMouseOver"/>
                </MultiBinding>
            </DataTrigger.Binding>
            <Setter TargetName="errorBorder" Property="IsOpen" Value="True" />
            <DataTrigger.EnterActions>
                <BeginStoryboard x:Name="fadeInStoryboard">
                    <Storyboard>
                        <DoubleAnimation Duration="00:00:00.15"
                                     Storyboard.TargetName="errorBorder"
                                     Storyboard.TargetProperty="Opacity"
                                     To="1"/>
                        <ThicknessAnimation Duration="00:00:00.15"
                                        Storyboard.TargetName="errorBorder"
                                        Storyboard.TargetProperty="Margin"
                                        FillBehavior="HoldEnd"
                                        From="1,0,0,0"
                                        To="5,0,0,0">
                            <ThicknessAnimation.EasingFunction>
                                <BackEase EasingMode="EaseOut" Amplitude="2"/>
                            </ThicknessAnimation.EasingFunction>
                        </ThicknessAnimation>
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
            <DataTrigger.ExitActions>
                <StopStoryboard BeginStoryboardName="fadeInStoryboard"/>
                <BeginStoryboard x:Name="fadeOutStoryBoard">
                    <Storyboard>
                        <DoubleAnimation Duration="00:00:00"
                                     Storyboard.TargetName="errorBorder"
                                     Storyboard.TargetProperty="Opacity"
                                     To="0"/>
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.ExitActions>
        </DataTrigger>
    </ControlTemplate.Triggers>
</ControlTemplate>
于 2012-10-31T13:06:25.877 回答