我已經構建了一個表單來編輯我的WPF應用程序中的數據。我正在爲表單添加驗證。我從this article和this one開始,但是錯誤模板或者全部顯示,或者根本不顯示。我不知道我做錯了什麼。我正在使用的是ControlTemplate
和Style
。他們是在窗體的資源:TextBox驗證不顯示錯誤
<ControlTemplate x:Key="TextBoxErrorTemplate">
<StackPanel ClipToBounds="False" Orientation="Horizontal">
<Border BorderBrush="Red"
BorderThickness="1"
Margin="15,0,0,0">
<AdornedElementPlaceholder Name="adornedElement" />
</Border>
<Image HorizontalAlignment="Right"
VerticalAlignment="Top"
Width="20"
Height="20"
Margin="0,-5,-5,0"
Source="{StaticResource ErrorImage}"
ToolTip="{Binding Converter={StaticResource ErrorConverter},
ElementName=adornedElement,
Path=AdornedElement.(Validation.Errors)}" />
</StackPanel>
</ControlTemplate>
<Style x:Key="TextBoxErrorStyle" TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="Binding Converter={StaticResource ErrorConverter},
RelativeSource={x:Static RelativeSource.Self},
Path=AdornedElement.(Validation.Errors)}"/>
</Trigger>
</Style.Triggers>
</Style>
這裏是一個使用這些部件的TextBox
:
<TextBox Grid.Column="0"
Margin="5,0"
MaxLength="50"
Name="NameBox"
TabIndex="0"
Validation.ErrorTemplate="{StaticResource TextBoxErrorTemplate}"
Style="{StaticResource TextBoxErrorStyle}"
TextAlignment="Left"
TextChanged="NameBox_TextChanged"
VerticalAlignment="Center"
Visibility="{Binding Converter={StaticResource InvertedBoolToVisibility}, Path=AutoConfigureCameras, RelativeSource={RelativeSource AncestorType={x:Type cs:EditLPRDetails}}}">
<TextBox.Text>
<Binding Mode="TwoWay" Path="Name" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<cs:RegexValidationRule Pattern="{StaticResource NamePattern}" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
注意的是,在RegexValidationRule
類作品中的驗證邏輯。當我將一個有效的字符串放入TextBox
時,它會返回成功,並且當我將一個無效字符串放入它時,它將返回失敗。無論怎樣,我認爲問題出在Style's Trigger
。
該死的tabcontrol ...解決方案的榮譽!!! – Nitin