首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >INotifyDataErrorInfo的不同模板

INotifyDataErrorInfo的不同模板
EN

Stack Overflow用户
提问于 2016-07-26 15:50:18
回答 2查看 655关注 0票数 0

我有错误对象:

代码语言:javascript
复制
/// <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和自定义样式。我以INotifyDataErrorInfo错误的形式返回ErrorContainer集合。我只想在ErrorKindCritical时显示错误消息。下面是我尝试这样做的方法:

代码语言:javascript
复制
<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>

然而,它根本不起作用,并使用默认的错误模板。

EN

回答 2

Stack Overflow用户

发布于 2016-07-26 18:50:55

不要将Validation.ErrorTemplate模板放在触发器中。

必须在错误发生前设置Validation.ErrorTemplate

如果您需要不同的错误模板,请在ErrorTemplate中使用触发器。或者,您可以将ContentPresenterContentTemplateSelector一起使用。

代码语言:javascript
复制
<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>
票数 2
EN

Stack Overflow用户

发布于 2016-07-26 16:38:55

你有没有试过用断点调试它来检查你的绑定?此外,我认为你以错误的方式瞄准了你的风格。下面是另一个可能有帮助的答案:https://stackoverflow.com/a/4133971/6563936

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38583998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档