我可以将验证结果的特定样式应用于一个按钮吗?

时间:2017-01-31 09:37:06

标签: wpf validation xaml idataerrorinfo

我正在开发一个WPF应用程序,我在其中使用IDataErrorInfo和验证规则进行验证。 为了在运行时显示验证结果,我在窗口的XAML中创建了一些样式。 只要存在输入错误,其中一种样式应禁用保存按钮:

<Window.Resources>
    <!--Disabling the Save-button by style not viewmodel-property-->
    <Style TargetType="{x:Type Button}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding ElementName=tbx_firstname, Path=(Validation.HasError)}" Value="true">
                <Setter Property="IsEnabled" Value="False"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding ElementName=tbx_lastname, Path=(Validation.HasError)}" Value="true">
                <Setter Property="IsEnabled" Value="False"/>
            </DataTrigger>
            <DataTrigger Binding="{Binding ElementName=tbx_age, Path=(Validation.HasError)}" Value="true">
                <Setter Property="IsEnabled" Value="False"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

我有两个问题:

  1. 该样式禁用窗口上的所有按钮。如何才能禁用保存按钮? 我尝试了以下内容,但似乎存在语法错误(VS不接受它):

    <Style TargetType="{x:Name btn_save}">
    
  2. 在保存按钮的样式中,我必须检查每个经过验证的控件。 是否有另一种可能性使该部分更短并且更不容易出错(因为它必须与视图模型结合)?

  3. 提前致谢!

1 个答案:

答案 0 :(得分:1)

如果您希望将样式应用于单个按钮而不是所有样式,则需要为样式指定一个键,例如:

<Style x:Key="SaveButtonStyle" TargetType="{x:Type Button}">

这样它就不会隐式应用于所有按钮。要将其应用于保存按钮,请在按钮上明确指定样式:

<Button Style="{StaticResource SaveButtonStyle}">