我已将验证规则绑定到我的 WPF 文本框,以控制用户输入的内容。
WPF 文本框:
<TextBox Grid.Column="0"
Grid.Row="1"
IsEnabled="{Binding Path=IsEnabled}"
Margin="5,8,8,5">
<TextBox.Text>
<Binding Path="ReferenceId"
UpdateSourceTrigger="PropertyChanged"
ValidatesOnDataErrors="True">
<Binding.ValidationRules>
<vRules:RefValidationRule ValidatesOnTargetUpdated="True" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
它工作正常。当用户输入错误时,TextBox 边框会变为红色,警告用户输入不正确。
此外,现在我也尝试在 TextBox 下显示验证错误消息,因此我绑定到静态资源下面的 TextBox:
<ResourceDictionary>
<Style x:Key="ValidationTextBoxErrorStyle" TargetType="{x:Type TextBox}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=IsEnabled}" Value="True" />
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.HasError)}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="BorderBrush" Value="Red"/>
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<StackPanel>
<AdornedElementPlaceholder x:Name="placeholder" />
<TextBlock FontSize="11" FontStyle="Italic" Foreground="Red" Text="{Binding [0].ErrorContent}" />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
文本框现在如下所示:
<TextBox Grid.Column="0"
Grid.Row="1"
Style="{StaticResource ValidationTextBoxErrorStyle}"
IsEnabled="{Binding Path=IsEnabled}"
Margin="5,8,8,5">
<TextBox.Text>
<Binding Path="ReferenceId"
UpdateSourceTrigger="PropertyChanged"
ValidatesOnDataErrors="True">
<Binding.ValidationRules>
<vRules:RefValidationRule ValidatesOnTargetUpdated="True" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
现在运行它时,如果用户在 TextBox 中输入了错误的引用 ID,格式无效,验证错误消息会正确显示在 TextBox 下,但现在 TextBox 边框没有变红。
所以我想要这两件事,我的意思是,当 TextBox 的值无效时,我希望 TextBox 边框获得 RED,同时在其下显示验证错误消息。
那么,我做错了什么?
请注意,我希望 TextBox 获得 RED 并在其下显示验证错误消息,当且仅当存在验证错误并且 IsEnabled 属性为 true 时,我使用了 MultiDataTrigger 的条件不止一个。