在我们的WPF应用程序中,我们有一个通用控件模板,我们用它来以一致的方式显示错误
<ResourceDictionary>
<ControlTemplate x:Key="ErrorTemplate">
<Border BorderThickness="1" BorderBrush="Red">
<AdornedElementPlaceholder />
</Border>
</ControlTemplate>
</ResourceDictionary>
在我们的应用程序中,当控件可能显示错误时,我们设置ErrorTemplate就像这样
<TextBox Validation.ErrorTemplate="{DynamicResource ErrorTemplate}" />
我现在想要在此错误模板中显示工具提示,但是在边框上设置工具提示属性并没有多大帮助,因为工具提示仅在用户将鼠标悬停在1px宽边框上时显示,而不是控件本身是错误的。
我知道我可以在一个样式中设置工具提示,但是这个错误模板应用于许多不同的控件(组合框等...),并且这些控件中的许多也使用独立于我的错误模板的样式 - 我我希望能够以通用的方式将我的错误模板应用于任何控件。
有没有办法在我的ErrorTemplate中设置工具提示?
答案 0 :(得分:1)
我定义了一种风格。我在我的对象(Customer)上有IDataErrorInfo,它对属性(LastName)进行验证,该属性例如是数据绑定到文本框。这是我的风格:
<Style x:Key="ValidationTextBox" TargetType="{x:Type Control}">
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Margin" Value="0,2,40,2"/>
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="True">
<Border Background="#B22222" DockPanel.Dock="Right" Margin="5,0,0,0" Width="20" Height="20" CornerRadius="10"
ToolTip="{Binding ElementName=customAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}">
<TextBlock Text="!" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" Foreground="White"/>
</Border>
<AdornedElementPlaceholder Name="customAdorner" VerticalAlignment="Center">
<Border BorderBrush="#B22222" BorderThickness="1" />
</AdornedElementPlaceholder>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style
<TextBox Style="{StaticResource ValidationTextBox}" Text="{Binding Path=Customer.LastName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, NotifyOnTargetUpdated=True, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" />
答案 1 :(得分:0)
正如我在my answer here中所述,你可以:
<ControlTemplate x:Key="ErrorTemplate">
<Border BorderThickness="1" BorderBrush="Red"
Background="Transparent"
ToolTip="{Binding Path=/ErrorContent}">
<AdornedElementPlaceholder />
</Border>
</ControlTemplate>
答案 2 :(得分:0)
对不起,我昨天没有时间......你会在下面试试,看看这是不是你想要的,拜托?
<Style x:Key="ValidationTextBox2" TargetType="{x:Type Control}">
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<Border BorderBrush="Red" BorderThickness="2">
<DockPanel LastChildFill="True" ToolTip="{Binding ElementName=customAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" Background="Transparent">
<TextBlock />
<AdornedElementPlaceholder Name="customAdorner" VerticalAlignment="Center">
</AdornedElementPlaceholder>
</DockPanel>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>