- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经为我的自定义控件的 ViewModel
实现了 IDataErrorInfo
。一切正常(边框被绘制为红色,带有错误的工具提示正在显示),但我想知道是否有办法为错误和警告设置两个不同的 Validation.ErrorTemplate
。
我的自定义控件样式(使用 Validation.ErrorTemplate)
<Style TargetType="{x:Type controls:CustomTextBoxNumeric}">
<Setter Property="TextAlignment" Value="Right"/>
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="True">
<Border BorderBrush="Red" BorderThickness="1">
<AdornedElementPlaceholder />
</Border>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors).CurrentItem.ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
我的自定义控件 ViewModel(INotifyPropertyChanged 在基础 ViewModel 中实现)
public class CustomTextBoxNumericViewModel : BaseComponentViewModel, IDataErrorInfo
{
private decimal? decimalValue;
private bool hasErrors;
private bool hasWarnings;
public CustomTextBoxNumericViewModel()
{
}
[DataMember(EmitDefaultValue = false)]
public decimal? DecimalValue
{
get { return this.decimalValue; }
set { this.decimalValue = value; this.Changed("DecimalValue"); this.Changed("HasErrors"); }
}
[DataMember(EmitDefaultValue = false)]
public bool HasErrors
{
get { return this.hasErrors; }
set { this.hasErrors = value; this.Changed("HasErrors"); this.Changed("DecimalValue"); }
}
[DataMember(EmitDefaultValue = false)]
public bool HasWarnings
{
get { return this.hasWarnings; }
set { this.hasWarnings = value; this.Changed("HasWarnings"); this.Changed("DecimalValue"); }
}
#region IDataErrorInfo Implementation
public string Error
{
get
{
throw new NotImplementedException();
}
}
public string this[string propertyName]
{
get
{
if (propertyName == "DecimalValue")
{
if (HasErrors)
{
return this.ErrorsField;
}
if (HasWarnings)
{
return this.WarningsField;
}
if (DecimalValue < 0)
{
return "Must be greater than 0";
}
}
return string.Empty;
}
}
#endregion
}
最佳答案
我设法使用 ControlTemplate
资源解决了我的问题。
我的风格改为:
<Style TargetType="{x:Type controls:CustomTextBoxNumeric}">
<Setter Property="TextAlignment" Value="Right"/>
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel LastChildFill="True">
<Border BorderBrush="Red" BorderThickness="1">
<AdornedElementPlaceholder />
</Border>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors).CurrentItem.ErrorContent}"/>
</Trigger>
<DataTrigger Binding="{Binding Path=ViewModel.HasWarnings, RelativeSource={RelativeSource Self}}" Value="True">
<Setter Property="Validation.ErrorTemplate" Value="{DynamicResource EntypoWarningTemplate}" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=ViewModel.HasErrors, RelativeSource={RelativeSource Self}}" Value="True">
<Setter Property="Validation.ErrorTemplate" Value="{DynamicResource EntypoErrorTemplate}" />
</DataTrigger>
</Style.Triggers>
</Style>
ControlTemplates
:
<ControlTemplate x:Key="MyErrorTemplate" TargetType="{x:Type Control}">
<DockPanel LastChildFill="True">
<Border BorderBrush="Red" BorderThickness="1">
<AdornedElementPlaceholder />
</Border>
</DockPanel>
</ControlTemplate>
<ControlTemplate x:Key="MyWarningTemplate" TargetType="{x:Type Control}">
<DockPanel LastChildFill="True">
<Border BorderBrush="Orange" BorderThickness="1">
<AdornedElementPlaceholder />
</Border>
</DockPanel>
</ControlTemplate>
关于c# - IDateErrorInfo Multi Validation.ErrorTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35795249/
我有一个带有验证规则的 TextBox,它位于 TabControl 的选项卡上。当验证规则失败时,默认的 ErrorTemplate 会正确显示(文本框周围的红色边框)。 但是,如果切换到另一个选项
我正在使用 WPF 验证进行 TextBox 验证。我已经定义了这个模板:
我有一个与这些非常相似的问题: Issue with WPF validation(IDataErrorInfo) and tab focusing TextBox with validation l
当内容无效时,我试图将样式应用于文本框。 以下样式有效:
我有一个 MainWindow 和一个 UserControl。 MainWindow 显示 UserControl。 UserControl 本身遵循 MVVM 模式并在 ViewModel 中实现
我有一个用于在控件周围显示红色边框和错误消息的模板。它有效(在文本框和组合框上测试)。但在两个特定的组合框中却没有。 好吧,让我们看看虚拟机中有什么不同: 因为我的基类中有通用的验证实现,所以没有变化
我有以下控件模板,我将其用作文本框的 Validation.ErrorTemplate:- 当 TextBox 包含
我一直在 StackOverflow 中查找,并完成了几个问题。但它们不起作用。 我有这个密码框: 我首先设置了 ValidationErrorTemplate="{x:Null}" 所以我第一次加
在我们的 WPF 应用程序中,我们有一个通用的控件模板,我们用它以一致的方式显示错误 在我们应用程序的其他地方,当
我正在尝试设置 DataGridCells 的 Validation.ErrorTemplate,这是 xaml 代码:
我们通过 StatusBar 中的 Validation.ValidationAdornerSite 显示我们的错误。随着 ValidationAdornerSite 的使用,wpf 似乎禁用了 Va
我有一个组合框,我需要编辑其错误模板以在出现验证错误时显示红色边框。 我正在使用以下样式
我正在尝试显示 PasswordBox 的 Validation.ErrorTemplate。但是,它没有显示。在同一表单上,我有一个用户名 TextBox 并且正确显示了 ErrorTemplate
我已经为我的自定义控件的 ViewModel 实现了 IDataErrorInfo。一切正常(边框被绘制为红色,带有错误的工具提示正在显示),但我想知道是否有办法为错误和警告设置两个不同的 Valid
我有一个使用验证的 WPF 窗口。我创建了一个错误模板,它在验证失败的元素周围放置了一个红色边框,并在下面显示错误消息。这可以正常工作,但错误消息会呈现在带有错误的控件下方的任何控件之上。我能说的最好
我在网格中有一个 BindingGroup: ... 我的网格有一个
就像这样,我有一个 wpf 绑定(bind) 如果我实现 IDataErrorInfo 并直接在我的 View 模型中拥有属性,那么它可以工作,它会显示工具提示和红色验证框。 如果我在作为 Vie
我发现当行的项目包含验证错误时,用于显示 DataGridTemplateColumn 内容的 ContentPresenter 显示默认的 ErrorTemplate。我看不到任何直接的方法来防止这
我正在使用 MahApps 并致力于实现文本框的验证。 MahApps 在 TextBox 中提供了一些不错的属性,如 Controls:TextBoxHelper.Watermark 和 Contr
我有一个用户控件,它有一个文本框,其中它的文本属性绑定(bind)到一个名为 SelectedValue 的依赖属性。当用户输入文本时,该值会根据另一个名为 ItemsSource 的 DP 进行验证
我是一名优秀的程序员,十分优秀!