我有以下文本框样式:
<Style x:Key="RenamingTextBox" TargetType="{x:Type TextBox}">
<Style.Setters>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Grid>
<TextBlock x:Name="block" Visibility="Visible" Text="{TemplateBinding Text}" Margin="0"/>
<TextBox x:Name="box" Visibility="Collapsed"
Text="{Binding Text, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Margin="1.25"/>
</Grid>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding IsRenaming}" Value="true">
<DataTrigger.Setters>
<Setter TargetName="block" Property="TextBox.Visibility" Value="Collapsed" />
<Setter TargetName="box" Property="TextBox.Visibility" Value="Visible" />
<Setter TargetName="box" Property="FocusManager.FocusedElement" Value="{Binding ElementName=box}" />
<Setter TargetName="box" Property="behaviors:TextBoxBehavior.SelectAll" Value="True"/>
</DataTrigger.Setters>
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
还有:
<Style TargetType="{x:Type TextBox}">
<Setter Property="Margin" Value="5" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="BorderBrush" Value="LightGray" />
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
重命名文本框效果很好,它可以毫无问题地从 TextBox 来回更改为 TextBlock。当我的名字有错误时,它甚至会出现漂亮的红色边框。问题是当我将鼠标悬停在出现错误的文本框上时,工具提示不会显示。我项目中的所有其他文本框都工作正常。有什么想法吗?
最佳答案
重命名文本框不会接收第二个样式,因为它无法获取多种样式。
只需在重命名文本框样式中包含“默认”文本框样式,并使用 BasedOn
属性即可:
<Style TargetType="{x:Type TextBox}">
...
</Style>
<Style x:Key="RenamingTextBox" TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
...
</Style>
关于wpf - 文本框验证工具提示未出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10300652/