我有一个绑定到 GUI 元素的类,如下所示:
<TextBox Style="{StaticResource ValidatedTextBox}"
Text="{Binding MaxDistance, ValidatesOnExceptions=True}" >
<TextBox.Style>
<Style TargetType="TextBox" >
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip">
<Setter.Value>
<Binding Path="(Validation.Errors).CurrentItem.ErrorContent"
RelativeSource="{RelativeSource Self}" />
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
MaxDistance 属性的设置器在此处实现:
public float MaxDistance
{
get { return m_maxDistance; }
set
{
// Check for valid values
if (value < MinDistance)
throw new ArgumentException(
"Max distance must be greater than min distance");
m_maxDistance = value;
}
}
问题是,当我在 TextBox 中输入无效值时,出现的工具提示显示“调用目标已引发异常”而不是“最大距离必须大于最小距离”。
我应该怎么做才能让工具提示读取 ArgumentException 的字符串?注意:标准类型转换异常也必须正确显示(即,如果我输入字符串而不是浮点数,标准错误消息仍应出现)。
我无法将异常移动到 IDataErrorInfo 接口中,因为如果数据无效,则不能在对象上设置数据,并且由于属性与对象的其他属性相互依赖,因此无法通过转换器或典型的验证规则...
在上面的示例中,验证在那里并且正在工作,它只是没有向用户提供有用的信息。
谢谢您的帮助