WPF中的错误提供程序

5

我正在查看工具箱中的WPF组件,但是找不到2005/2008版本中存在的错误提供程序。

它被移除了吗?

3个回答

10

ErrorProvider 是一个 WinForms 控件,但在 WPF 中没有等价物。不过,如果您创建一个 Windows 窗体项目,则仍然可以在 Visual Studio 2008 中找到它。

您可能想看看这篇关于 WPF 中错误验证的文章。它提供了一些有用的建议和想法来处理验证。


3

0

首先,抱歉评论这样一个旧的讨论,但这可能会有所帮助,因为我有完全相同的问题,而Simon的链接帮助我“开始了解一些东西”

我可以测试Simon P.Stevens的教程,但是老实说,我并不是很喜欢它:

  • 使用responseTemplate使得显示错误时响应变慢。
  • 仅当规则对于同一类始终相同时才有效(在我的情况下,我有一些数量,有时可能是负数,有时不是)。
  • 在国际化应用程序的情况下(在我的情况下),外部库无法访问资源,其中包含翻译,因此我无法设置适当的消息。

我认为使用MVVM非常适合处理任何情况:

我设置了我的TextBox,带有BorderBrush和ToolTip,根据我的条件,我将隐藏/显示ToolTip和颜色边框:

XAML:

<TextBox x:Name="tbName" Grid.Column="1" Grid.Row="0" Margin="3" LostFocus="tbName_LostFocus" BorderBrush="{Binding BordertbName}"
                 Text="{Binding MonRepere.Nom}" ToolTipService.ToolTip="{Binding ErrorName}" ToolTipService.IsEnabled="{Binding ToolTipNameEnable}"/>

代码后台(失去焦点=离开适用于WindowsForm的用户):

private void tbName_LostFocus(object sender, RoutedEventArgs e)
    {
        if(tbName.Text=="")
        {
            this.mv.ErrorName = Properties.Resources.ErrorEmpty;

        }
        else
        {
            mv.ErrorName = "";
        }
    }

然后是 ViewModel:

private string errorName;
            public string ErrorName
            {
                get { return errorName; }
                set
                {
                    errorName = value;
                    if (value == "")
                    {
                        ToolTipNameEnable = false;
                        BordertbName = Brushes.Gray;
                    }
                    else
                    {
                        ToolTipNameEnable = true;
                        BordertbName = Brushes.Red;
                    }
                    this.NotifyPropertyChanged("ErrorName");
                }
            }
            private Brush bordertbName;
            public Brush BordertbName
            {
                get { return bordertbName; }
                set
                {
                    bordertbName = value;
                    this.NotifyPropertyChanged("BordertbName");
                }
            }
            private bool toolTipNameEnable;
            public bool ToolTipNameEnable
            {
                get { return toolTipNameEnable; }
                set
                {
                    toolTipNameEnable = value;
                    this.NotifyPropertyChanged("ToolTipNameEnable");
                }
            }

当规则针对特定情况时,这非常有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接