C# Wpf文本框验证控制文本值上的模板触发器
我有一个文本框:C# Wpf文本框验证控制文本值上的模板触发器,c#,wpf,textbox,controltemplate,C#,Wpf,Textbox,Controltemplate,我有一个文本框: <TextBox Grid.Row="3" Grid.Column="1" Width="200" TextWrapping="Wrap" VerticalAlignment="Top" Margin="5,10,-10,2" Style="{StaticResource TextBoxValueStyle}" Validation.ErrorTe
<TextBox Grid.Row="3"
Grid.Column="1"
Width="200"
TextWrapping="Wrap"
VerticalAlignment="Top"
Margin="5,10,-10,2"
Style="{StaticResource TextBoxValueStyle}"
Validation.ErrorTemplate="{StaticResource ValidationControlTemplate}">
<TextBox.Text>
<MultiBinding StringFormat=" {0} {1}">
<Binding Path="Id" ValidatesOnNotifyDataErrors="True" NotifyOnValidationError="True"/>
<Binding Path="Name" />
</MultiBinding>
</TextBox.Text>
</TextBox>
这是我的控制模板:
<ControlTemplate x:Key="ValidationControlTemplate">
<DockPanel Visibility="{Binding ElementName=Placeholder, Path=Visibility}">
<Image x:Name="Image"
DockPanel.Dock="Right"
VerticalAlignment="Center"
Margin="0,-2"
Style="{StaticResource InformationImageStyle}">
<Image.ToolTip>
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ErrorContent}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Image.ToolTip>
</Image>
<AdornedElementPlaceholder Name="Placeholder" VerticalAlignment="Center"/>
</DockPanel>
<ControlTemplate.Triggers>
<Trigger Property="TextBox.Text" Value="">
<Setter Property="DockPanel.Dock" TargetName="Image" Value="Left"/>
<Setter Property="Margin" TargetName="Image" Value="-20,-2"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
我的问题是,当文本框有值且有错误时,它没有采用原始值DockPanel.Dock=Right和Margin=0,-2
我总是以空文本开始。错误时,图像始终显示在左侧
我缺少什么?在元素周围放置一个网格,并用绑定到装饰文本框元素的DataTrigger替换触发器:
我不明白你的问题。Validation.ErrorTemplate仅在实际发生错误时才会显示。如果没有验证错误,则没有DockPanel。@mm8如果文本框中有文本,则仍然可能是错误,我希望图像显示在右侧,而不是左侧。因此,您的问题是图像始终显示在左侧?@mm8是的,这是我无法解决的问题=@mm8出现错误时始终显示在左侧,当没有错误时,我看不到图片,因为它应该很好!,非常感谢,我需要将值更改为2,但这是因为textbox multibinding中有两个空格=
<ControlTemplate x:Key="ValidationControlTemplate">
<DockPanel Visibility="{Binding ElementName=Placeholder, Path=Visibility}">
<Image x:Name="Image"
DockPanel.Dock="Right"
VerticalAlignment="Center"
Margin="0,-2"
Style="{StaticResource InformationImageStyle}">
<Image.ToolTip>
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ErrorContent}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Image.ToolTip>
</Image>
<Grid>
<AdornedElementPlaceholder Name="Placeholder" VerticalAlignment="Center"/>
</Grid>
</DockPanel>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding AdornedElement.Text.Length, ElementName=Placeholder}" Value="0">
<Setter Property="DockPanel.Dock" TargetName="Image" Value="Left"/>
<Setter Property="Margin" TargetName="Image" Value="-20,-2"/>
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>