我正在WPF應用程序上工作,並且已將自定義錯誤模板添加到所有文本框。我的應用程序以全屏模式運行。該錯誤顯示在停靠在控件右側的DockPanel(AdornedElementPlaceholder)中。但是,如果控件已經位於屏幕的右側,則會導致錯誤顯示在應用程序的邊界之外。自定義ErrorTemplate關閉屏幕顯示錯誤
我正在尋找一種方法來檢查ErrorBorder的最右上角/底角是否超出了應用程序的範圍。如果是這樣,請將對接從右側改爲左側。我正在考慮在ErrorBorder控件上使用各種類型的轉換器。這是我的ErrorTemplate的代碼。
錯誤模板:
<ControlTemplate x:Key="CustomErrorTemplate">
<DockPanel>
<!--ERROR-->
<Border x:Name="ErrorBorder"
Background="Red"
BorderBrush="Black"
BorderThickness="1"
DockPanel.Dock="Right"
Margin="5 0"
Height="{Binding ActualHeight,
ElementName=ErrorAdorner}">
<TextBlock Background="Red"
Foreground="White"
VerticalAlignment="Center"
FontSize="{Binding ActualHeight,
Converter={StaticResource FontSizeConverter},
RelativeSource={RelativeSource AncestorType={x:Type Border},
Mode=FindAncestor}}"
Text="{Binding ElementName=ErrorAdorner,
Path=AdornedElement.(Validation.Errors).CurrentItem.ErrorContent}"/>
</Border>
<!--CONTENT-->
<AdornedElementPlaceholder x:Name="ErrorAdorner" />
</DockPanel>
<ControlTemplate.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource BooleanToOrConverter}">
<Binding ElementName="ErrorAdorner" Path="AdornedElement.IsKeyboardFocused" />
<Binding ElementName="ErrorAdorner" Path="AdornedElement.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>
注:我用我的應用程序中的各種控制同樣的錯誤模板。所以我的目標需要與「任何」控制一起工作。
另外,這裏是我如何爲所有TextBox控件實現我的錯誤模板。
文本框風格:
<Style TargetType="{x:Type TextBox}">
<Setter Property="Validation.ErrorTemplate" Value="{StaticResource CustomErrorTemplate}" />
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="BorderBrush" Value="Red" />
<Setter Property="BorderThickness" Value="2" />
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="Pink" />
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
任何指導,將是非常讚賞。
這工作完美。如果屏幕關閉,工具提示將重新調整。謝謝! – Chris