我有错误对象:
/// <summary>
/// Represent error in wizard control child.
/// </summary>
public sealed class ErrorContainer
{
/// <summary>
/// Ctor.
/// </summary>
/// <param name="kind"></param>
/// <param name="message"></param>
public ErrorContainer(ErrorKind kind, string message)
{
Contract.Requires(!string.IsNullOrEmpty(message));
Kind = kind;
Message = message;
}
/// <summary>
/// Kind of error.
/// </summary>
public ErrorKind Kind { get; private set; }
/// <summary>
/// Text to display.
/// </summary>
public string Message { get; private set; }
public override string ToString()
{
return Message;
}
}
/// <summary>
/// Kind of error.
/// </summary>
public enum ErrorKind
{
/// <summary>
/// Prevents telegram send.
/// </summary>
Critical = 0,
/// <summary>
/// Only display message.
/// </summary>
Warning = 1
}
我在文本框中使用了INotifyDataErrorInfo和自定义样式。我将ErrorContainer
的集合作为INotifyDataErrorInfo错误返回。我想仅在ErrorKind
为Critical
时显示错误消息。以下是我尝试这样做的方法:
<Style x:Key="TextboxWithAdvancedValidationHorizontal" TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
<Style.Triggers>
<DataTrigger Binding="{Binding CurrentItem.ErrorContent.Kind}" Value="{x:Static kn01:ErrorKind.Critical}">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<StackPanel Orientation="Horizontal" SnapsToDevicePixels="True">
<Border BorderBrush="Salmon" Background="#11FF0000" IsHitTestVisible="False">
<AdornedElementPlaceholder />
</Border>
<StackPanel Orientation="Horizontal">
<Polygon VerticalAlignment="Center" Points="0,4 4,0 4,8" Fill="Salmon" Stretch="Fill" Stroke="Salmon" StrokeThickness="2" />
<Border Background="Salmon" Padding="4" Margin="-1,0,0,0">
<TextBlock HorizontalAlignment="Center" Foreground="White" FontWeight="Bold" Margin="2,-1,0,1" Text="{Binding CurrentItem.ErrorContent}" />
</Border>
</StackPanel>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
但它根本不起作用并使用默认错误模板。
答案 0 :(得分:2)
不要将Validation.ErrorTemplate
模板放在触发器内。
Validation.ErrorTemplate
必须在错误发生之前设置。
如果您需要不同的错误模板,请在ErrorTemplate中使用触发器。或者,您可以将ContentPresenter
与ContentTemplateSelector
一起使用。
<Style x:Key="TextboxWithAdvancedValidationHorizontal" TargetType="TextBox">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<StackPanel Orientation="Horizontal" SnapsToDevicePixels="True">
<Border BorderBrush="Salmon" Background="#11FF0000" IsHitTestVisible="False">
<AdornedElementPlaceholder />
</Border>
</StackPanel>
<ControlTemplate.Triggers>
<DataTrigger Binding="...">
<!-- add you custom UI logic here -->
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
答案 1 :(得分:0)
您是否尝试使用断点对其进行调试以检查绑定? 另外,我认为你是以错误的方式瞄准你的风格。这里有另一个可能有用的答案:https://stackoverflow.com/a/4133971/6563936