我正在查看工具箱中的 WPF 组件,但我找不到 2005/2008 中存在的错误提供程序。
它被移除了吗?
ErrorProvider是一个 Winforms 控件。WPF 中没有等价物。但是,如果您创建了一个 win forms 项目,您仍然可以在 Visual Studio 2008 中找到。
您可能想看看这篇关于WPF 中的错误验证的文章。它对如何处理验证有一些有用的建议和想法。
.NET 3.5 添加了对 IDataErrorInfo 的 WPF 支持:.NET 3.5 中的数据验证。
首先请原谅我评论了一个如此古老的讨论,但这可能会有所帮助,因为我有完全相同的问题,西蒙的链接帮助我“从某事开始”
我可以测试 Simon P.Stevens 教程,但老实说我不太喜欢它:
我认为使用 MVVM 非常适合管理任何情况:
我使用 BorderBrush 和 ToolTip 设置我的 TextBox,根据我的条件,我将隐藏/显示 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}"/>
后面的代码(LostFocus = 为曾经使用过 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");
}
}
当规则针对具体情况时非常有用。