【发布时间】:2019-02-28 07:55:00
【问题描述】:
我有一个文本框:
<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 and Margin=0,-2)
我总是从空文本开始。图像总是显示在左边,错误。
我错过了什么?
【问题讨论】:
-
我不明白你的问题。
Validation.ErrorTemplate只会在实际出现错误时显示。当没有验证错误时,没有DockPanel。 -
@mm8 如果文本框中有文本仍然可能是错误,然后我希望图像显示在右侧,而不是左侧。
-
所以你的问题是图像(总是)显示在左侧?
-
@mm8 是的,这就是我无法解决的问题 =(
-
@mm8 出现错误时总是在左侧,没有错误时我看不到图片(应该是这样)
标签: c# wpf textbox controltemplate