如何在TextBox属性IsEnabled为false时禁用验证?

时间:2017-05-24 21:34:11

标签: c# xaml

我在StackOverflow上找到了各种答案,但没有一个能帮助我。 我想在IsEnabled="false"时关闭TextBox上的验证 我在这里缺少什么?

  <TextBox x:Name="idTxtBox">

        <!--This is where I tried to disable validation-->
        <TextBox.Style>
            <Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
                <Style.Triggers>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>

        <!--I want to disable these validation rules-->
        <TextBox.Text>
            <Binding Path="ID" UpdateSourceTrigger="PropertyChanged">
                <Binding.ValidationRules>
                    <val:RequiredFieldValidation ValidationStep="RawProposedValue"/>
                    <val:IsNumberValidation Min="1" Max="250" ValidationStep="ConvertedProposedValue"/>
                    <val:UniqueIDTag ValidationStep="RawProposedValue"/>
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>



        <Validation.ErrorTemplate>
            <!--........-->
      </Validation.ErrorTemplate>
    </TextBox>

1 个答案:

答案 0 :(得分:0)

如果没有一个好的Minimal, Complete, and Verifiable code example显示你的代码是如何工作的,并且更具体地解释了你希望代码做什么以及为什么你当前的方法没有实现这一点,那么很难确定答案是什么会给你最好的。但是,在我看来,你正走在正确的轨道上,你只是改变了错误的财产。

我不希望删除ErrorTemplate值以影响是否发生验证,只是用户看到的内容。如果要删除验证,则应该这样做:删除验证。例如:

<TextBox.Style>
    <p:Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
        <p:Style.Triggers>
            <Trigger Property="IsEnabled" Value="false">
                <Setter Property="Text" Value="{Binding ID}"/>
            </Trigger>
        </p:Style.Triggers>
    </p:Style>
</TextBox.Style>

(忽略p:命名空间...我只是把它放在那里,以便代码格式化程序Stack Overflow使用不会被Style元素名称旁边跟踪。)

换句话说,验证包含在绑定中。因此,当您不希望进行验证时,将绑定更改为1而不进行验证(并且由于控件已禁用,因此您也可以省略UpdateSourceTrigger值。