【发布时间】:2015-01-09 18:09:03
【问题描述】:
我有一个实现 IDataErrorInfo 接口以进行验证的视图模型,对于错误,它会生成一个字符串,该字符串是资源字典中描述错误的本地化字符串的键。但是,当尝试将以下样式和模板应用于文本框时,我得到红色边框但没有工具提示,但是删除我的转换器并使用默认的转换器会给我工具提示,但显然不是本地化的字符串。
你能看出我做错了什么和/或是否有更好的方法吗?
class MessageCodeToMessageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null)
{
string messageCode = (string)value;
try
{
return (string)App.Current.Resources[messageCode];
}
catch (Exception)
{
return messageCode;
}
}
else
{
return null;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return "";
}
}
<local:MessageCodeToMessageConverter x:Key="Converter"></local:MessageCodeToMessageConverter>
<Style x:Key="TextBox" TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent, Converter={StaticResource Converter}}"/>
</Trigger>
</Style.Triggers>
</Style>
<ControlTemplate x:Key="ErrorTemplate">
<DockPanel LastChildFill="True">
<Border BorderBrush="Red" BorderThickness="1">
<AdornedElementPlaceholder />
</Border>
</DockPanel>
</ControlTemplate>
【问题讨论】:
-
您能否显示
XAML代码您的TextBox在哪里以及如何将样式和模板应用于文本框? -
你确定调用了
ConvertBack方法并创建了资源字典中的key吗?您的 xml 看起来是正确的。 -
问题是资源是在合并的 xaml 资源字典中定义的,而不是直接在 App.xaml 中定义的,所以我通过使值转换器继承框架元素并使用查找资源方法来解决此问题。不确定这是多么“正确”,但多值转换器看起来像是另一种选择。
标签: c# .net wpf xaml idataerrorinfo