【问题标题】:WPF error template border dont show all textWPF错误模板边框不显示所有文本
【发布时间】:2012-10-31 11:49:33
【问题描述】:

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

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

谢谢雅库布

【问题讨论】:

    标签: c# wpf styles errortemplate


    【解决方案1】:

    解决方法是使用popup作为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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多